(一)字符串函数
(二)
(一)字符串函数
(1)strlen:
1)字符串以\0作为结束的标志。strlen统计的是\0前面的出现的字符个数(不包含\0)
2)参数指向的字符串必须以“\0"作为结束
char arr[]={'a','b','c'};strlen输出的是随机值
3)函数的返回值为size_t,为无符号整型
if(strlen("abc")-strlen("abcd")>0)//3-4=-1变成无符号整型为整数
{
printf("hehe");
}
else printf("haha");
4)自我实现
my_strlen(char*str)
{
int count=0;
while(str!='\0')
{
count++;
str++;
}
return count;
}
(2)strcpy(把第二个字符串复制到第一个上面)
int main()
{
char arr1[]="abcdefg";
char arr2[]="nit";
strcpy(arr1,arr2);//得到nit\0efg
}
自我实现:
char* my_strcpy(char*dest,const char*src)
{
assert(dest!=NULL);
assert(src!=NULL);
char*src=dest;
//拷贝src指向的字符串到dest指向的空间包含\0
while(*dest++=*src++)
{
;
}
//返回目的空间的起始地址
return ret;
}
(3)strcat (连接俩个字符串)
1)源字符串必须以”\0"结束。
2)目标空间必须足够的大,必须能够容得下源字符串的内容
3)目标空间必须可以修改
my_stract(char*dest,const char*src)
{
char*ret=dest;
assret(dest&&src);
1.找到目的字符串的\0
while(*dest!='\0')
{
*dest++;
}
2.找到之后再追加
while(*dest++=*src++)
{
;
}
return ret;
}
(4)strcmp (str1,str2)//比较
如果字符串1小于字符串2返回小于0的数字
int main()
{
char*p1="abc";
char*p2="qbc";
if(strcmp(p1,p2)>0)
{
printf("p1>p2");
}
if(strcmp(p1,p2)<0)
{
printf("p1<p2");
}
if(strcmp(p1,p2)=0)
{
printf("p1=p2");
}
}
自我实现:
int my_stecmp(const char*str1,const char*str2)
{
assert(str1&&str2);
//比较
while(*str1==*str2)
{
if(*str1=='\0')
{
return 0;
}
*str1++;
*str2++;
}
if(*str1>*str2)
return 1;
else if(*str1<*str2)
return -1;//return(*str1-*str2);
}
(5)strncpy //可以限制长度的strcpy
int main()
{
char arr1[10]="abcdef";
char arr2[]="hello bit";
strncpy(arr1,arr2,4);//得到helled
}
拷贝num个字符从源字符串到目标空间。如果源字符串的长度小于num,则拷贝完原来的字符串后,在目标的后面加0,直到num个
(6)strncat//可以限制长度的strcat
int main()
{
char arr1[30]="hello\0XXXXXX";
char arr2[]="world";
strncat(arr1,arr2,8);
}helloworld\0
(7)strstr//查找字符串
int main()
{
char*p1="abcdef";
char*p2="def";
char*ret=strstr(p1,p2);//接收返回来的地址
if(ret==NULL)
{
printf("子串不存在");
}
else
{
printf("%s",ret);
}
}
char* my_strstr(const char*p1,const char*p2)
{
assert(p1!=NULL);
assert(p2!=NULL);
char*s1=p1;
char*s2=p2;
char*cur=p1;
if(*p2=='\0')
return p1;
while(*cur)
{
s1=cur;
s2=p2;
while((*p1==*p2)&&(*p1!='\0')&&(*p2!='\0'))
{
p1++;
p2++;
}
if(*p2!='\0')
{
return cur;
}
cur++;
}
}
(8)strtok//把一个字符串分割成各个段
char*strtok(char*str,const char*stp)