免责声明:此文章只做本人记录学习。
目录
注:1.所有函数包含在头文件<string.h>
2.所有测试字符串均为常量字符串(不可改动)
3.传递字符串地址其实是首字符的地址,若打印符号是%s便打印从此开始的字符串
函数一:strlen计算字符串长度函数
原:
int main()
{
char *p1 = "areyouready";
int strnum = strlen(p1);
printf("%d ",strnum);
return 0;
}//计算结果:11
关于strlen函数:
1.strlen 找字符串的原理是寻找‘\0’为字符串结尾终止计数
2.strlen的返回值是 size_t 也就是正整数,不会出现负值情况
my_strlen实现:
size_t my_strlen(const char*p1)//注意是const
{
assert(p1!= NULL);断言空指针检查
int num = 0;
while (*p1)
{
p1++;
num++;
}
return num;
}
int main()
{
char *p1 = "areyouready";
int strnum = my_strlen(p1);
printf("%d ",strnum);
return 0;
}
函数二:strcpy
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[]= "are_you_ready";
char arr2[] = "0";
strcpy(arr2,arr1);
printf("%S\n",arr1);
return 0;
}
关于strcpy函数
1.函数声明:
char *strcpy(char *destin, const char *source);
注意:第二个参数是const char*且返回参数是char*,返回指针指向destin的指针
2.my_strcpy的实现
#include<stdio.h>
#include<assert.h>
#include<string.h>
char *my_strcpy(char* destin ,const char *src)
{
assert(*destin != NULL);
assert(*src != NULL);
char* ret = destin;//传进来的地址需要先记住,destin所表示的地址后面会变化
while(*destin++ = *src++)
{
;
}
return ret;//传回开始的地址
}
int main()
{
char arr1[] = "are_you_ready";
char arr2[] = "maybe";
my_strcpy(arr1,arr2);
return 0;
}
函数三:strcat
#include<studio.h>
#include<string.h>
int main()
{
char destin[25]={"I love"};
char *str = " C";
strcat(destin, str);
printf("%s\n", destin);
return 0;
}
关于strcat函数
1.函数声明
char *strcat(char *destin, const char *source);
注意:第二个参数是const char*且返回参数是char*,指向destin的指针
2.strcat的实现是把source的首字符替代目标字符串的‘\0’,同时把source的‘\0‘也拷贝过去。
3.my_strcat的实现
#include<stdio.h>
my_strcat(char* destin, const char* source)
{
assert(destin != NULL);
assert(source != NULL);
char* ret = destin;
while (*destin)
{
destin++;
}
while (*destin++ = *source++)
{
;
}
return ret;
}
int main()
{
char arr[40] = "Who talks of victory?";
char* str = "To endure is all";
my_strcat(arr,str);
printf("%s\n", arr);
return 0;
}
函数四:strcmp
#include<stdio.h>
#include<string.h>
int main()
{
char* arr = "yes";
char* arr1 = "no";
int n = strcmp(arr,arr1);
if(n == 0);
{
printf("字符串一样");
}
elseif(n>0)
{
printf("第一个字符串大于第二个");
}
else
{
printf("第二个字符串大于第一个");
}
return 0;
}
关于strcmp函数
1.函数声明
int strcmp(const char *str1,const char *str2);
2.
str1 > str2 , 返回 1;
str1 < str2 , 返回 -1;
str1 == str2 , 返回 0;
注:strcmp并不是比较字符串长度而是比较每一个字母在字母表的位置。
my_strcmp的实现
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);//为了保证str1和str2不是空
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
//return (*str1-str2);
if (*str1 > *str2)
return 1;//不一定是1,只要是大于0的数都可以
else
return -1;//不一定是-1,只要是小于0的数都可以