文章目录
- 一.strlen函数
- 1.函数的声明与使用
- 2.strlen函数的模拟实现
- 二.strcpy函数
- 1.函数的声明与使用
- 2.strcpy函数的模拟实现
- 三.strncpy函数
- 四.strcat函数
- 1.函数的声明与使用
- 2.strcat函数的模拟实现
- 五.strncat函数
- 六.strcmp函数
- 1.函数的声明与使用
- 2.strcmp函数的模拟实现
- 七.strstr函数
- #1.函数的声明与使用
- 2.strstr函数的模拟实现
- 八.strtok函数
提示:以下是本篇文章正文内容,下面案例可供参考
一.strlen函数
1.函数的声明与使用
函数的声明
size_t strlen(const char *str)
参数
str – 要计算长度的字符串。
返回值
该函数返回字符串的长度。
函数的使用:
#include <stdio.h>
int main()
{
char arr[] = "shu awhd";
printf("arr字符串长度:%d", strlen(arr));
return 0;
}
运行结果:
2.strlen函数的模拟实现
size_t my_strlen(const char* arr) //size_t 无符号整数
{
assert(arr);//判断指针是不是空指针
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
二.strcpy函数
1.函数的声明与使用
描述
C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
声明
下面是 strcpy() 函数的声明。
char *strcpy(char *dest, const char *src)
参数
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
返回值
该函数返回一个指向最终的目标字符串 dest 的指针。
#include <stdio.h>
int main()
{
char arr1[20] = "abcdefgsshhhhsssj";
char arr2[20] = "hello friends";
printf("修改前arr1:%s\n", arr1);
strcpy(arr1, arr2);
printf("修改后arr1:%s\n", arr1);
return 0;
}
运行结果:
2.strcpy函数的模拟实现
char* my_strcpy(char* s1,const char* s2)
{
assert(s1 && s2);
char* ret = s1;
/*while (*s2 != '\0')
{
*s1 = *s2;
s2++;
s1++;
}
*s1 = *s2;*/
//改良写法
while ((*s1++ = *s2++) != '\0')
{
;
}
return ret;
}
三.strncpy函数
描述
C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
声明
下面是 strncpy() 函数的声明。
char *strncpy(char *dest, const char *src, size_t n)
参数
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
n – 要从源中复制的字符数。
返回值
该函数返回最终复制的字符串。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "To be or not to be";
char str3[40];
strncpy(str3, str1, 5);
puts(str3);
//没有手动加上终止符在打印时会出问题
str3[5] = '\0';
//由于strncpy不会自行加上终止符,需要手动加上
puts(str3);
return 0;
}
代码结果
四.strcat函数
1.函数的声明与使用
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
声明
下面是 strcat() 函数的声明。
char *strcat(char *dest, const char *src)
参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
返回值
该函数返回一个指向最终的目标字符串 dest 的指针。
函数用例
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[50]="hello";
char arr2[50]=" everyone";
printf("使用strcat函数前arr1: %s\n\n", arr1);
strcat(arr1, arr2);
printf("使用strcat函数后arr1: %s\n\n", arr1);
return 0;
}
运行结果
2.strcat函数的模拟实现
char* my_strcat(char* dest, const char* str)
{
char* ret = dest;
while (*dest != '\0')
{
dest++;
}
while ( ( *dest++ = *str++) != '\0')
{
;
}
五.strncat函数
描述
C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
声明
下面是 strncat() 函数的声明。
char *strncat(char *dest, const char *src, size_t n)
参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src – 要追加的字符串。
n – 要追加的最大字符数。
返回值
该函数返回一个指向最终的目标字符串 dest 的指针。
#include <stdio.h>
#include <string.h>
int main()
{
char src[50], dest[50];
strcpy(src, "pcs ");
strcpy(dest, "shdha asd hdw f asd");
strncat(src, dest, 10);
printf("最终的目标字符串: %s\n", src);
return 0;
}
运行结果
六.strcmp函数
1.函数的声明与使用
C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
声明
下面是 strcmp() 函数的声明。
int strcmp(const char *str1, const char *str2)
参数
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。
返回值
该函数返回值如下:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
注:不是比较长度,而是比较字符串中对应位置字符的大小,相同就比较下一对,直到不同,或者都遇到\0
函数用例
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "sdjshdf";
char arr2[] = "sdsncah";
printf("%d",strcmp(arr1, arr2));
return 0;
} //该代码结果小于0;
2.strcmp函数的模拟实现
int my_strcmp(const char* s1,const char* s2)
{
while (*s1 == *s2)
{
if (*s2 == '\0')//2个字符串都为\0时
{
return 0;
}
s1++;
s2++;
}
if (*s1 > *s2)
return 1;
else
return -1;
}
七.strstr函数
#1.函数的声明与使用
C语言库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
声明
下面是 strstr() 函数的声明。
char *strstr(const char *haystack, const char *needle)
参数
haystack – 要被检索的 C 字符串。
needle – 在 haystack 字符串内要搜索的小字符串。
返回值
该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
函数用例:
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "xcsfhdswadws";
char arr2[] = "swadw";
char* ret = strstr(arr1, arr2);
if (NULL == ret)
{
printf("找不到子串");
}
else
{
printf("%s\n\n", ret);
}
return 0;
}
运行结果:
2.strstr函数的模拟实现
char* my_strstr( char* dest, char* str)
{
char* s1 = dest;
char* s2 = str;
char* ret = dest;
while (*ret)
{
s1 = ret;
s2 = s2;
while (*s1 && *s2 && ( *s1 == *s2))
//当*s1=*s2时,往后找下一个字符
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return ret;
//当s2为'\0'时说明已经找到,返回ret
}
ret++;
}
return NULL;
}
八.strtok函数
函数原型:
char* strtok (char* str,constchar* delimiters );
函数功能:
切割字符串,将str切分成一个个子串
函数参数:
str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。
delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。
函数返回值:
当s中的字符查找到末尾时,返回NULL;
如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。
函数用例:
#include<stdio.h>
#include <string.h>
int main()
{
char arr[] = "awjs@wjdw$wjdg&s";
char arr1[] = "@$&";
printf("%s\n", strtok(arr, arr1)); //只找第一个标记
printf("%s\n", strtok(NULL, arr1)); //从保存好的位置开始继续往后找
printf("%s\n", strtok(NULL, arr1)); //从保存好的位置开始继续往后找
printf("%s\n", strtok(NULL, arr1)); //从保存好的位置开始继续往后找
return 0;
}
代码结果: