个人博客主页:博主首页
目录
strlen字符串的长度
求字符串长度,统计\0之前出现的字符个数,库函数模拟代码如下
size_t my_strlen(char* str)
{
while (1)
{
if (*str == '\0')//如果*str等于0,就返回0的值
{
return 0;
}
else
{
return 1 + my_strlen(++str);//把++str传给下一次的函数调用
}
}
}
int main()
{
size_t ret = my_strlen("abcde");
printf("%zu\n", ret);
return 0;
}
strcpy字符串拷贝
将第二个字符串拷贝到第一个字符串,库函数模拟代码如下
char* my_strcpy(char* str1, char* str2)
{
char* ch = str1;//ch保存str1首元素的地址,因为后面str1指向\0的地址了
while (*str1++ = *str2++)
{
;
}
return ch;
}
int main()
{
char arr1[20] = "abcdefgh";
char arr2[20] = "hgfedcba";
char* ch = my_strcpy(arr1, arr2);
printf("%s\n", ch);
printf("%s\n", arr1);
return 0;
}
strcmp字符串比较(>0、<0、=0)
如果第一个大于第二个,则返回大于0的数,否则返回小于0的数,相等则返回0,库函数模拟代码如下
int my_strcmp(const char* p1, const char* p2)
{
while (*p1 == *p2)//当两个字符相等进来
{
if (*p1 == '\0')//如果遇到\0,则这两个字符串相等
{
return 0;
}
p1++;
p2++;
}
return (*p1 - *p2);
}
int main()
{
char arr1[] = "abc";
char arr2[] = "abcd";
int ret = my_strcmp(arr1, arr2);
if (ret > 0)
{
printf("大于\n");
}
if (ret < 0)
{
printf("小于\n");
}
if (ret == 0)
{
printf("等于\n");
}
return 0;
}
strcat追加字符串
把第二个字符串追加到第一个字符串\0位置处,库函数代码使用如下
int main()
{
char arr1[220] = "abc";
char arr2[] = "defg";
char* ret = strcat(arr1, arr2);
printf("%s\n", ret);
return 0;
}
strstr在字符串中找子串
库函数代码使用如下
int main()
{
char arr1[100] = "bbbcccabcbbbbbbbbabca";
char arr2[] = "abc";
char* ret = strstr(arr1, arr2);//结果是abc和后面的字符
printf("%s\n", ret);
return 0;
}
strtok拆分字符串
库函数使用如下
int main()
{
char arr[] = "welcome * to.china i";
char sep[] = "* .";
char* ret = strtok(arr, sep);
while (ret != NULL)
{
if (ret != NULL)
{
printf("%s ", ret);
}
ret = strtok(NULL, sep);
}
return 0;
}
perror打印错误信息
这样使用
int main()
{
FILE* pf = fopen("a.txt", "r");
perror("pf");//将 errno 的值解释为错误消息,并将其打印到 stderr(标准错误输出流,通常是控制台),并可以选择在它前面加上 str 中指定的自定义消息。
return 0;
}