1.strlen 计算字符串长度
1."abcdef"="abcdef"+"\0",strlen数"\0"之前的字符;
char arr[]={'a'+'b'+'c'+'d'+'e'+'f' } 生成随机数; (你不知道后面到哪了有\0)
2.生成无符号的数,不能直接加减,if语句中可以大于等于;
3.my_strlen 生成
#include <assert.h>
#include<stdio.h>
size_t my_strlen(const char*str)
{
int count =0;
assert(str!=0);
while(*str!='\0')
{
count++;
str++;
}
return 0;
}
int main()
{
char arr[]={"abcdef"};
int len=my_strlen(arr);
printf("%d",len);
return 0;
}
2.strcpy 字符串拷贝
1.字符串拷贝拷贝时原字符串必须有'\0',且会将'\0',拷贝在目标空间
2.目标空间要足够大,防止溢出
3.目标空间可变
4.strncpy
char arr1[]="abcdef";
char arr2[]="qwe";
strncpy(arr1,arr2,3);
限制住了,只能拷贝3个字符
strncpy(arr1,arr2,5);
若超过了,拿'\0',填充
5.my_strcpy的实现.
#include<stdio.h>
#include<assert.h>
char my_strcpy(char*dest,char*src)
{
assert(src&&dest);
char*ret=dest;
while(*dest++=*src++;}
{
;
}
return ret;
}
int main()
{
char arr[20]={0};
char *arr2="hello bit";
printf("%s\n",my_strcpy(arr1,arr2));
return 0;
}
3.strcat 字符串追加
1.原字符串,必须以'\0'结束
2.strncat
char arr1[]="abcdef";
char arr2[]="qwert";
strncat(arr1,arr2,5);
追加5个后还会加入'\0',以完成字符串
strncat(arr1,arr2,8);
若超过,不会用'\0',补充剩下的字符
3.my_strcat 实现
#include<stdio.h>
#include<assert.h>
my_strcat(char*dest,char*src)
{
assert(dest&&src);
char*ret=dest;
while(*dest)
{
dest++;
}
while(*dest++=*src++)
{
;
}
return ret;
}
int main()
{
char arr1[]="hello";
char arr2[]="bit";
printf("%s\n",my_strcat(arr1,arr2));
return 0;
}
4.strcmp 字符串比较
1.strncmp
char arr1[]="abcdef";
char arr2[]="abcdef";
int ret=strncmp(arr1,arr2,4);
只比较4个数
2.my_strcmp实现
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char*s1,const char*s2)
{
assert(s1&&s2);
while(*s1==*s2)
{
if(*s1=='\0')
{
return 0;
}
s1++;
s2++;
}
if(*s1>*s2)
{
return 1;
}
else(*s1<*s2)
{
return -1;
}
}
int main()
{
char arr1[]="abcdef";
char arr2[]="abq";
int ret=strcmp(arr1,arr2);
if(ret>0)
{
printf(">\n");
}
else if(ret==0)
{
printf("==\n");
}
else if(ret<0)
{
printf("<\n");
}
printf("%d\n",ret);
return 0;
}
5.strstr 查找子串
1.my_strstr
#include<stdio.h>
#include<assert.h>
char*my_strstr(char*str1,char*str2)
{
assert(str1&&str2);
const char*s1=str1;
const char*s2=str2;
char*cur=str1;
while(*cur)
{
s1=cur;
s2=str2;
while((*s1!='\0'&&*s2!='\0')&&(*s1!=*s2))
{
s1++;
s2++;
}
if(*s2=='\0')
{
return cur;
}
cur++;
}
}
int main()
{
char arr1[]="abcdeqabcdef";
char arr2[]="cdef";
char*ret=my_strstr(arr1,arr2);
if(NULL==ret)
{
printf("找不到子串\n");
}
else
{
printf("%s\n",ret);
}
return 0;
}