函数strstr(母串中找子串)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//查找字符串
int main(int argc, char const *argv[])
{
char str[] = "jackroseken";
char *childstr = strstr(str,"rose");
printf("%s\n",childstr);//roseken
char *childstr1 = strstr(str,"zack");//找不到,不输出
if(childstr1 == NULL)
{
printf("find failed");
}
else
printf("%s\n",childstr1);
return 0;
}
函数strlen(求一个指定字符串的长度)
///////////strlen.h///////////////
#include<stdio.h>
int mystrlen(const char *str)
{
int i = 0;
while(str[i])
{
i++;
}
return i;
}
/////////////strlen.c///////////////
/*
My_strlen : 计算字符串长度,'0'除外
*/
int mystrlen(const char *str);
/////////////main.c////////////////
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"mystrlen.h"
int main(int argc, char const *argv[])
{
int len;
char str[20];
while(gets(str) != NULL)
{
len = mystrlen(str);
printf("%d\n",len);
}
return 0;
}
函数strtok(母串拆子串)
注意:
-
该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记 ‘\0’ 。
-
由于该函数需要更改字符串 str,因此 str 指向的内存必须是可写的。
-
首次调用时 str 指向原始字符串,此后每次调用 str 用 NULL 代替
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//字符串拆解
/* int main(int argc, char const *argv[])
{
char str[] = "www.csdn.com.cn";
char *p = strtok(str,".");
printf("%s,%s\n",p,str);
p = strtok(NULL,".");
printf("%s\n",p);
p = strtok(NULL,".");
printf("%s\n",p);
p = strtok(NULL,".");
printf("%s\n",p);
return 0;
} */
int main(int argc, char const *argv[])
{
char str[] = "www.csdn.com.cn";
char *p = strtok(str,".");
while (p != NULL)
{
printf("%s\n",p);
p = strtok(NULL,".");
}
return 0;
}
函数strcat与strncat(字符串拼接)
注意:
-
这两个函数的功能,都是将 src 中的字符串,复制拼接到 dest 的末尾。
-
strcat() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
-
strncat() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 的末尾。
#include<stdio.h>
#include<string.h>
//字符串拼接
int main(int argc, char const *argv[])
{
char str[100] = "jack";
//char *s = strcat(str,"rose");
//printf("%s,%s\n",s,str);
strcat(str,"rose");
printf("%s\n",str);
//拼接指定数目字符串
char s[10] = "abc";
strncat(s, "123456789",sizeof(s)-strlen(s)-1);
printf("%s\n", s);
// 输出 "abc123456",两个字符串被拼接到了一起,且不会溢出
return 0;
}
字符串函数拼接封装
/////////////////strcat.c///////////////////
#include<stdio.h>
#include<string.h>
char mystrcat(char *arr,char *buf)
{
int i = 0;
while (arr[i] != '\0')
{
i++;
}
int j = 0;
while (buf[j])
{
arr[i+j] = buf[j];
j++;
}
return i;
}
/////////////strcat.h////////////////////
char mystrcat(char *arr,char *buf);
/////////////main.c//////////////////
#include<stdio.h>
#include<string.h>
#include"mystrcat.h"
#include<stdbool.h>
int main(int argc, char const *argv[])
{
char arr[] = "hello";
char buf[] = "world";
mystrcat(arr,buf);
printf("%s",arr);
return 0;
}
函数strcpy与strncpy(复制字符串)
注意:
-
这两个函数的功能,都是将 src 中的字符串,复制到 dest 中。
-
strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
-
strncpy() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 中。
//////////////strcpy.c////////////
#include<stdio.h>
#include<string.h>
void mystrcpy(char *arr,char *buf)
{
int i = 0;
while(arr[i])
{
buf[i] = arr[i];
i++;
}
buf[i] = 0; ;
}
///////////strcpy.h////////////////
void mystrcpy(char *arr,char *buf);
//////////main.c//////////////////
#include<stdio.h>
#include"mystrcpy.h"
int main(int argc, char const *argv[])
{
char arr[100] = {0};
char buf[100] = {0};
printf("input :");
scanf("%s",arr);
mystrcpy(arr,buf);
printf("output :%s",buf);
return 0;
}
////////////strncpy.c///////////////////////
#include<stdio.h>
char mystrncopy(char *arr,char *buf,size_t n)
{
int i = 0;;
while(n)
{
arr[i] = buf[i];
arr++;
buf++;
n--;
}
return 0;
}
///////////strncpy.h/////////////////
char mystrncopy(char *arr,char *buf,size_t n);
///////////main.c/////////////////////
#include<stdio.h>
#include"mystrncopy.h"
int main(int argc, char const *argv[])
{
char arr[20] = "aaaaaaaaaa";
char buf[6] = "bbbbb";
mystrncopy(arr,buf,3);
printf("output :%s\n",arr);
return 0;
}
函数strcmp与strncmp(复制字符串)
注意:
-
比较字符串大小,实际上比较的是字符的 ASCII码值的大小。
-
从左到右逐个比较两个字符串的每一个字符,当能“决出胜负”时立刻停止比较。
strcmp
#include<stdio.h>
#include<string.h>
//字符串比较
//s1 > == < s2时,返回1,0,-1
//用于比较字符串内容是否相等,返回0
//只比较首字母,如果首字母相等再比较下一个字母
int main(int argc, char const *argv[])
{
char s1[] = "acc";
char s2[] = "abc";
printf("%d\n",strcmp(s1,s2));
if(strcmp(s1,s2) == 0)
{
printf("相等\n");
}
else
{
printf("不相等\n");
}
return 0;
}
strncmp
#include<stdio.h>
#include<string.h>
//字符串比较
//s1 > == < s2时,返回1,0,-1
//用于比较指定数字符串是否相等
int main(int argc, char const *argv[])
{
char s1[] = "acc";
char s2[] = "abc";
printf("%d\n",strcmp(s1,s2));
if(strncmp(s1,s2,3) == 0)
{
printf("相等\n");
}
else
{
printf("不相等\n");
}
return 0;
}
函数strchr与strrchr(在指定的字符串查找特定字符串)
注意:
-
这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c。
-
strchr() 从左往右找,strrchr() 从右往左找。
-
字符串结束标记 ‘\0’ 被认为是字符串的一部分。
#include<stdio.h>
#include<string.h>
//在指定字符串内查找特定字符串
int main(int argc, char const *argv[])
{
char str[] = "www.csdn.com.cn";
char *p = strchr(str,'.');//从左往右找到第一个出现的字符'.'
printf("%s\n%s\n",p,str);//输出".csdn.com.cn"
printf("---------\n");
char *p1 = strrchr(str,'.');//从右往左找到第一个出现的字符'.'
printf("%s\n%s\n",p1,str);//输出".cn"
return 0;
}