#include <stdio.h>
size_t Strlen(char *str) //tpyedef unsigned int size_t, 计算字符串的有效长度,不包含0。
{
size_t len = 0;
while(str[len]!=0)
{
len++;
}
return len;
}
char *Strcpy(char *a,char *str) //复制完字符串后,在a后追加0。
{
int i=0,len=0;
for(i=0;str[i]!=0;i++)
{
a[i]=str[i];
len++;
}
a[len] = 0;
return a;
}
char *Strncpy(char *a,char *str,int n) //当a长度小于n,则拷贝完字符串后,在a后追加0。
{ //当str的长度大于等于n,就截取src的前n个字符,不会在a后追加0。
int i,len=0;
for(i=0;str[i]!=0 && i<n;i++)
{
a[i]=str[i];
len++;
}
if(len < n)
{
a[len]=0;
}
return a;
}
char *Strcat(char *a,char *str) //a最后原有的结尾字符0会被覆盖掉,并在连接后的字符串的尾部再增加一个0。
{
int i=0,j=0;
while(a[i]!=0)
{
i++;
}
for(j=0;str[j]!=0;j++)
{
a[i+j] = str[j];
}
a[i+j] = 0;
return a;
}
char *Strncat(char *a,char *str,int m) //strncat会将a字符串最后的0覆盖掉,字符追加完成后,再追加0。
{
int i=0,j=0;
for(;a[i]!=0;i++);
for(j=0; str[j]!=0 && j<m ;j++)
{
a[i+j] = str[j];
}
a[i+j] = 0;
return a;
}
char *Strchr(char *str,int a) //返回一个指向在字符串s中第一个出现a的位置(地址),如果找不到,返回0
{
int i;
for(i=0;str[i]!=0;i++)
{
if(str[i]==a)
{
return (char*)str+i;
}
}
return 0;
}
char *Strrchr(char *str,int a) //返回一个指向在字符串s中最后出现a的位置(地址),如果找不到,返回0。
{
int i,j;
for(i=0;str[i]!=0;i++)
{
if(str[i]==a)
{
j = i;
}
}
return (char*)str+j;
}
int Strcmp(char *a,char*b) //比较字符串大小,a > b,则返回1,相等则返回0,a < b,返回-1
{
int i,j,k,len;
for(i=0;a[i]!=0;i++);
for(j=0;b[j]!=0;j++);
for(k=0;k<i&&k<j;k++)
{
if(a[k]>b[k])
{
return 1;
}
else if(a[k]<b[k])
{
return -1;
}
}
return 0;
}
int Strncmp(char *a,char*b,int n) //比较字符串大小(只比较前n位),a > b,则返回1,相等则返回0,a < b,返回-1
{
int i,j,k,len;
for(i=0;a[i]!=0;i++);
for(j=0;b[j]!=0;j++);
len = (i<j)?i:j;
if(n<len) len = n;
for(k=0;k<len;k++)
{
if(a[k]>b[k])
{
return 1;
}
else if(a[k]<b[k])
{
return -1;
}
}
return 0;
}
char *strstr(char *a,char *b) //返回字符串 b 第一次出现的位置,如果没有匹配到 b 则返回0
{
int i,j,len;
i=j=len=0;
for(i=0;a[i]!=0;i++);
for(j=0;b[j]!=0;j++);
if(j>i) return 0;
len = j;
i = j = 0;
while(b[j]!=0 && a[i]!=0)
{
if(b[j]==a[i])
{
if(j==len)
{return (char *)&b[i-j];}
j++;i++;
}
else
{i++;}
}
return 0;
}
int main()
{
char str[40];
scanf("%s",str);
printf("字符串的长度%d\n",Strlen(str));
printf("Strcpy:%s\n",Strcpy(str,"fuck"));
printf("Strncpy:%s\n",Strncpy(str,"fuck",3));
printf("Strncpy:%s\n",Strncpy(str,"fuck",5));
printf("Strcat:%s\n",Strcat(str,"you"));
printf("Strncat:%s\n",Strncat(str,"you",2));
printf("Strncat:%s\n",Strncat(str,"you",5));
printf("Strchr:%s\n",Strchr(str,'y'));
printf("Strrchr:%s\n",Strrchr(str,'y'));
printf("Strcmp:%d\n",Strcmp("ABC","ABC"));
printf("Strcmp:%d\n",Strcmp("ABC","BC"));
printf("Strcmp:%d\n",Strcmp("ABC","0"));
printf("Strcmp:%d\n",Strncmp("ABC","ABA",2));
printf("Strcmp:%d\n",Strncmp("ABC","ABA",3));
printf("strstr:%s\n",strstr("abc","b"));
}
<String.h>库常用函数的实现
最新推荐文章于 2023-12-29 23:15:45 发布
本文详细介绍了使用C语言实现常见的字符串操作函数,包括字符串长度计算、复制、拼接、查找等核心功能。通过这些函数的实现,读者可以深入了解字符串处理的基本原理和技术细节。
4462

被折叠的 条评论
为什么被折叠?



