C语言提供了丰富的字符串处理函数,这些函数在<string.h>
头文件中声明。以下是一些常用字符串函数的详细讲解:
字符串拷贝函数
-
strcpy
-
功能 :将源字符串(包括结尾的
'\0'
)复制到目标字符串。 -
原型 :
char *strcpy(char *dest, const char *src);
-
参数 :
dest
目标字符串,src
源字符串。 -
返回值:返回指向目标字符串的指针。
-
示例 :
cchar src[] = "Hello"; char dest[10]; strcpy(dest, src); printf("%s\n", dest); // 输出 "Hello"
-
-
strncpy
-
功能 :最多复制
n
个字符从源字符串到目标字符串。如果源字符串长度小于n
,则目标字符串的剩余部分将用'\0'
填充。 -
原型 :
char *strncpy(char *dest, const char *src, size_t n);
-
参数 :
dest
目标字符串,src
源字符串,n
要复制的最大字符数。 -
返回值:返回指向目标字符串的指针。
-
示例 :
cchar src[] = "Hello"; char dest[10]; strncpy(dest, src, 3); printf("%s\n", dest); // 输出 "Hel"
-
字符串连接函数
-
strcat
-
功能 :将源字符串(包括结尾的
'\0'
)连接到目标字符串的末尾。 -
原型 :
char *strcat(char *dest, const char *src);
-
参数 :
dest
目标字符串,src
源字符串。 -
返回值:返回指向目标字符串的指针。
-
示例 :
cchar dest[50] = "Hello, "; char src[] = "World!"; strcat(dest, src); printf("%s\n", dest); // 输出 "Hello, World!"
-
-
strncat
-
功能 :最多连接
n
个字符从源字符串到目标字符串。 -
原型 :
char *strncat(char *dest, const char *src, size_t n);
-
参数 :
dest
目标字符串,src
源字符串,n
要连接的最大字符数。 -
返回值:返回指向目标字符串的指针。
-
示例 :
cchar dest[50] = "Hello, "; char src[] = "World!"; strncat(dest, src, 3); printf("%s\n", dest); // 输出 "Hello, Wor"
-
字符串比较函数
-
strcmp
-
功能:比较两个字符串,区分大小写。
-
原型 :
int strcmp(const char *str1, const char *str2);
-
参数 :
str1
第一个字符串,str2
第二个字符串。 -
返回值 :
- 如果返回值小于0,表示
str1
小于str2
- 如果返回值等于0,表示
str1
和str2
相等 - 如果返回值大于0,表示
str1
大于str2
- 如果返回值小于0,表示
-
示例 :
cchar str1[] = "abc"; char str2[] = "abd"; int result = strcmp(str1, str2); if (result < 0) { printf("%s 小于 %s\n", str1, str2); } else if (result == 0) { printf("%s 等于 %s\n", str1, str2); } else { printf("%s 大于 %s\n", str1, str2); }
-
-
strncmp
-
功能 :最多比较
n
个字符。 -
原型 :
int strncmp(const char *str1, const char *str2, size_t n);
-
参数 :
str1
第一个字符串,str2
第二个字符串,n
要比较的最大字符数。 -
返回值 :与
strcmp
相同。 -
示例 :
cchar str1[] = "abcdef"; char str2[] = "abcxyz"; int result = strncmp(str1, str2, 3); if (result == 0) { printf("前3个字符相等\n"); }
-
字符串长度函数
strlen
-
功能 :计算字符串的长度(不包括结尾的
'\0'
)。 -
原型 :
size_t strlen(const char *str);
-
参数 :
str
要计算长度的字符串。 -
返回值:返回字符串的长度。
-
示例 :
cchar str[] = "Hello, World!"; size_t len = strlen(str); printf("字符串长度:%zu\n", len); // 输出 "字符串长度:13"
-
字符串查找函数
-
strchr
-
功能:在字符串中查找首次出现的指定字符。
-
原型 :
char *strchr(const char *str, int c);
-
参数 :
str
要查找的字符串,c
要查找的字符。 -
返回值 :找到则返回指向该字符的指针,否则返回
NULL
。 -
示例 :
cchar str[] = "Hello, World!"; char *p = strchr(str, 'o'); if (p != NULL) { printf("字符 'o' 在位置:%ld\n", p - str); // 输出 "字符 'o' 在位置:4" }
-
-
strrchr
-
功能:在字符串中查找最后一次出现的指定字符。
-
原型 :
char *strrchr(const char *str, int c);
-
参数 :
str
要查找的字符串,c
要查找的字符。 -
返回值 :找到则返回指向该字符的指针,否则返回
NULL
。 -
示例 :
cchar str[] = "Hello, World!"; char *p = strrchr(str, 'o'); if (p != NULL) { printf("字符 'o' 最后出现的位置:%ld\n", p - str); // 输出 "字符 'o' 最后出现的位置:7" }
-
-
strstr
-
功能:在字符串中查找首次出现的子字符串。
-
原型 :
char *strstr(const char *haystack, const char *needle);
-
参数 :
haystack
要查找的主字符串,needle
要查找的子字符串。 -
返回值 :找到则返回指向子字符串首次出现位置的指针,否则返回
NULL
。 -
示例 :
cchar haystack[] = "Hello, World!"; char needle[] = "World"; char *p = strstr(haystack, needle); if (p != NULL) { printf("子字符串 '%s' 在位置:%ld\n", needle, p - haystack); // 输出 "子字符串 'World' 在位置:7" }
-
字符串分割函数
strtok
-
功能:根据指定的分隔符将字符串分割成子字符串。
-
原型 :
char *strtok(char *str, const char *delim);
-
参数 :
str
要分割的字符串,delim
分隔符字符串。 -
返回值 :返回指向下一个子字符串的指针,如果分割完成则返回
NULL
。 -
示例 :
cchar str[] = "Hello, World! This is C."; char *token = strtok(str, " ,!."); // 分隔符为 ' ', ',', '!' 和 '.' while (token != NULL) { printf("%s\n", token); token = strtok(NULL, " ,!."); // 后续调用传入NULL } // 输出: // Hello // World // This // is // C
-
字符串转换函数
-
atoi
-
功能:将字符串转换为整数。
-
原型 :
int atoi(const char *str);
-
参数 :
str
要转换的字符串。 -
返回值:返回转换后的整数值。
-
示例 :
cchar str[] = "12345"; int num = atoi(str); printf("转换后的整数:%d\n", num); // 输出 "转换后的整数:12345"
-
-
atof
-
功能:将字符串转换为浮点数。
-
原型 :
double atof(const char *str);
-
参数 :
str
要转换的字符串。 -
返回值:返回转换后的浮点数值。
-
示例 :
cchar str[] = "123.45"; double num = atof(str); printf("转换后的浮点数:%.2f\n", num); // 输出 "转换后的浮点数:123.45"
-
-
itoa
(非标准)-
功能:将整数转换为字符串。
-
原型 :
char *itoa(int value, char *str, int radix);
-
参数 :
value
要转换的整数,str
存储结果的字符串,radix
进制(如10表示十进制)。 -
返回值:返回指向存储结果的字符串的指针。
-
示例 :
cint num = 12345; char str[20]; itoa(num, str, 10); printf("转换后的字符串:%s\n", str); // 输出 "转换后的字符串:12345"
-
这些函数提供了强大的字符串操作能力,熟练掌握它们可以让你更高效地处理字符串相关的任务。在使用这些函数时,要注意它们的安全性,例如strcpy
和strcat
可能导致缓冲区溢出,可以通过使用strncpy
、strncat
等带长度参数的函数来避免这些问题。