一、长度不受限制的字符串函数
1.strlen函数
字符串以‘\0’作为结束标志,strlen函数返回的是字符串前面出现的字符个数
函数原型:size_t strlen( const char *string );
头 文 件 :<string.h>
函数功能:计算字符串的长度;
注意事项:1.定义的字符串必须要包含'\0'
char arr1[] = "abcd";/*正确*/ char arr2[] = { 'a', 'b', 'c', 'd' };/*错误*/
举例:
#include <stdio.h> #include <string.h> int main() { char str1[] = "ABCD";//里面包含\0 char str2[] = { 'A','B','C','D' };//里面不包含\0 printf("%d\n", strlen(str1)); printf("%d\n", strlen(str2)); return 0; }
2.strcpy函数
函数原型:char *strcpy( char *strDestination, const char *strSource );
头 文 件 :<string.h>
函数功能:字符串拷贝;它是连同'\0'一起拷贝过去;
参数解读:
1.char *strDestination --- 目标字符串
2.const char *strSource --- 源字符串(不可被修改)
3.返回类型:char* --- 返回的是拷贝后源字符串的地址
注意事项:
1.拷贝时源字符串中一定要包含\0;
2.拷贝时目标空间要足够大,保证放的下要拷贝过去的字符串;
3.拷贝时目标空间必须可修改(不能被const修饰);
举例:
#include <stdio.h> #include <string.h> int main() { char str1[20] = "xxxxxxx";//目标空间要足够大 char str2[] = "Hello World"; printf("拷贝前为:%s\n", str1); strcpy(str1, str2); printf("拷贝后为:%s\n", str1); return 0; }
3.strcat函数
函数原型:char *strcat( char *strDestination, const char *strSource );
头 文 件 :<string.h>
函数功能:字符串连接(追加):它是连同'\0'一起追加过去;
参数解读:
1.char *strDestination --- 目标字符串
2.const char *strSource --- 源字符串(不可被修改)
3.返回类型:char* --- 返回的是拷贝后源字符串的地址
注意事项:
1.追加时源字符串中一定要包含\0
2.追加时目标空间要足够大,保证放的下要追加过去的字符串
3.追加时目标空间必须可修改(不能被const修饰)
4.自己不能给自己追加(需要使用strncat)
举例:
#include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello ";//目标空间要足够大 char str2[] = "World"; printf("追加前为:%s\n", str1); strcat(str1, str2); printf("追加后为:%s\n", str1); return 0; }
4.strcmp函数
函数原型:int strcmp( const char *string1, const char *string2 );
头 文 件 :<string.h>
函数功能:字符串比较:比较的是ASSIC码值;比较的是内容而不是长度;
参数解读:
1.string1 --- 被比较的字符串;
2.string2 --- 待比较的字符串;
比较方法:
1.当 str1 < str2 返回负数
2.当 str1 = str2 返回0
3.当 str1 > str2 返回正数
举例:
#include <stdio.h> #include <string.h> int main() { char str1[] = "ABCD"; char str2[] = "ABCE"; int ret = strcmp(str1, str2); if (ret > 0) { printf("ret=%d:str1>str2\n", ret); } else if (ret < 0) { printf("ret=%d:str1<str2\n", ret); } else { printf("ret=%d:str1=str2\n", ret); } return 0; }
二、 长度受限制的字符串函数
1.strncpy函数
函数原型:char *strncpy( char *strDest, const char *strSource, size_t count );
头 文 件 :<string.h>
函数功能:字符串拷贝:可以指定拷贝字符的个数;
参数解读:
1.char *strDest --- 目标字符串
2.const char *strSource --- 源字符串(不可被修改)
3.size_t count --- 指定拷贝多少个字符
4.返回类型:char* --- 返回的是拷贝后源字符串的地址
注意事项:
1.拷贝时:当拷贝的个数大于源字符串长度时(比如源字符串“abcd”,拷贝6个),不够的用\0补(设置个数时要合理)
2.拷贝时目标空间要足够大,保证放的下要拷贝过去的字符串
3.拷贝时目标空间必须可修改(不能被const修饰)举例:
#include <stdio.h> #include <string.h> int main() { char dest[20] = "xxxxxxx"; char src[] = "Hello World"; printf("拷贝前为:%s\n", dest); strncpy(dest, src,5); printf("拷贝后为:%s\n", dest); return 0; }
#include <stdio.h> #include <string.h> int main() { char dest[20] = "xxxxxxxxxx"; char src[] = "abcd"; printf("拷贝前为:%s\n", dest); strncpy(dest, src, 6); printf("拷贝后为:%s\n", dest); return 0; }
2.strncat函数
函数原型:char *strncat( char *strDest, const char *strSource, size_t count );
头 文 件 :<string.h>
函数功能:字符串追加:可以指定追加字符的个数;
参数解读:
1.char *strDest --- 目标字符串
2.const char *strSource --- 源字符串(不可被修改)
3.size_t count --- 指定追加多少个字符
4.返回类型:char* --- 返回的是拷贝后源字符串的地址
注意事项:
1.追加时:当追加的个数小于源字符串的个数时,会主动追加'\0'
2.追加时:当追加的个数大于源字符串的个数时,库函数的定义是只追加到'\0'位置,所以个数就算很大并不影响
3.追加时目标空间必须可修改(不能被const修饰)
举例:
#include <stdio.h> #include <string.h> int main() { char dest[20] = "Hello "; char src[] = "World"; printf("追加前为:%s\n", dest); strncat(dest, src, 4); printf("追加后为:%s\n", dest); return 0; }
3.strncmp函数
函数原型:int strncmp( const char *string1, const char *string2, size_t count );
头 文 件 :<string.h>
函数功能:字符串比较:可以指定比较字符的个数;
参数解读:
1.string1 --- 被比较的字符串;
2.string2 --- 待比较的字符串;
3.size_t count --- 指定 比较多少个字符 (从前向后比较)
比较方法:
1.当 str1 < str2 返回负数
2.当 str1 = str2 返回0
3.当 str1 > str2 返回正数
举例:
#include <stdio.h> #include <string.h> int main() { char str1[] = "ABCD"; char str2[] = "ABCE"; int ret = strncmp(str1, str2,3); if (ret > 0) { printf("ret=%d:str1>str2\n", ret); } else if (ret < 0) { printf("ret=%d:str1<str2\n", ret); } else { printf("ret=%d:str1=str2\n", ret); } return 0; }
三、其他字符串函数
1.strstr函数
函数原型:char *strstr( const char *string, const char *strCharSet );
头 文 件:<string.h>
函数功能:字符串查找:在string中查找strCharSet是否存在;
参数解读:
1.string --- 被搜索的以空结尾的字符串;
2.strCharSet --- 要搜索的以空结尾的字符串;
注意事项:
1.当找到时:返回一个指针 strCharSet 在string中第一次出现的那个位置;
2.未找到时:返回一个空指针(NULL);
举例:
#include <stdio.h> #include <string.h> int main() { char str1[] = "ABCD"; char str2[] = "BC"; char str3[] = "HaHa"; if (strstr(str1, str2) != NULL) { printf("找到了\n"); } else { printf("找不到\n"); } return 0; }
2.strtok函数
函数原型:char *strtok( char *strToken, const char *strDelimit );
头 文 件:<string.h>
函数功能:字符串切分
功能:
1.sep参数是个字符串,定义了用作分隔符的字符集合
2.第一个参数指定一个字符,它包含0个或多个由sep字符串中一个或多个分隔符分割的标记
3.strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
4.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
5.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
6.如果字符串中不存在更多的标记,则返回 NULL 指针
举例:
#include <stdio.h> #include <string.h> int main() { char arr1[] = "zhangsan@school.student"; char arr2[100] = { 0 }; char sep[] = "@."; strcpy(arr2, arr1); char* ret = NULL; for (ret = strtok(arr2, sep); ret != NULL;ret=strtok(NULL,sep)) { printf("%s\n", ret); } return 0; }