字符函数和字符串函数

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;
}

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值