C语言操作字符串的8个常用函数(附带实例)
除了 puts() 函数和 gets() 函数可以用来输出和输入字符串之外,C语言对字符串的操作提供了大量函数,使用时需添加头文件
该函数返回一个指向最终的目标数组 dest 的指针。
strcpy() 函数把 src 所指向的字符串复制到目标数组 dest。需要注意的是,如果目标数组 dest 不够大,而源字符串的长度又太长,可能会出现缓冲区溢出的情况。
C 语言提供了另一个库函数 strncpy(),下面是 strncpy() 函数的声明:
该函数把 src 指向的字符串复制到目标数组 dest,最多复制 n 个字符。当 src 的长度小于 n 时,目标数组 dest 的剩余部分将用空字节填充,因此只复制源字符串即可。函数返回最终复制的字符串。
【实例】strncpy() 函数的用法。
strcat() 函数把 strS 指向的字符串追加到 strDes 指向的字符串的结尾,因此必须要保证 strDes 有足够的内存空间来容纳两个字符串,否则会出现溢出错误。
strlen() 函数从字符串的开头位置依次向后计数,直到最后的 '\0',然后返回计数器的值。最终统计的字符串长度不包括 '\0'。
【实例】strlen() 函数的用法。代码如下:
strcmp() 函数会根据 ASCII 值依次比较 str1 和 str2 的每一个字符,直到出现不一样的字符,或者到达字符串末尾的 '\0'。
【实例】字符串比较函数。代码如下:
【实例】字符串字符大小写转换。代码如下:
【实例】字符串子串匹配函数。
<string.h>
,下面对这些函数进行简单介绍。C语言strcpy()函数和strncpy()函数
C语言提供了 strcpy() 库函数,下面是 strcpy() 函数的声明:char *strcpy(char *dest,const char *src)参数说明如下:
- dest:指向用于存储复制内容的目标数组;
- src:要复制的字符串。
该函数返回一个指向最终的目标数组 dest 的指针。
strcpy() 函数把 src 所指向的字符串复制到目标数组 dest。需要注意的是,如果目标数组 dest 不够大,而源字符串的长度又太长,可能会出现缓冲区溢出的情况。
【实例】通过函数将一个字符串的内容复制到另外一个字符数组中。缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量时,溢出的数据覆盖在合法的数据上。
#include <stdio.h> #include <string.h> int main () { char str1[]="Hello!"; char str2[40]; char str3[40]; strcpy (str2,str1); strcpy (str3,"copy successful"); printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3); return 0; }编译运行,结果如下:
str1: Hello!
str2: Hello!
str3: copy successful
C 语言提供了另一个库函数 strncpy(),下面是 strncpy() 函数的声明:
char *strncpy(char *dest,const char *src,size_t n);参数说明如下:
- dest:指向用于存储复制内容的目标数组;
- src:要复制的字符串;
- n:要从源字符串中复制的字符数。
该函数把 src 指向的字符串复制到目标数组 dest,最多复制 n 个字符。当 src 的长度小于 n 时,目标数组 dest 的剩余部分将用空字节填充,因此只复制源字符串即可。函数返回最终复制的字符串。
【实例】strncpy() 函数的用法。
#include <stdio.h> #include <string.h> int main() { char src[40]; char dest[12]; memset(dest, '\0', sizeof(dest)); //在dest所占内存块中填充'\0'以清除原内存值 strcpy(src, "Hello!"); strncpy(dest, src, 5); printf("最终的目标字符串: %s\n", dest); return 0; }编译运行,结果如下:
最终的目标字符串: Hello
C语言strcat()函数
strcat() 函数用来将两个字符串连接(拼接)起来。下面是 strcat() 函数的声明:char* strcat(char* strDes, const char* strS);参数说明如下:
- strDes:目标字符串;
- strS:源字符串。
strcat() 函数把 strS 指向的字符串追加到 strDes 指向的字符串的结尾,因此必须要保证 strDes 有足够的内存空间来容纳两个字符串,否则会出现溢出错误。
【实例】strcat() 函数的用法。注意,strDes 末尾的 '\0' 会被覆盖,strS 末尾的 '\0' 会一起被复制过去,因此最终的字符串只有一个 '\0'。
#include <stdio.h> #include <string.h> int main () { char src[50], dest[50]; strcpy(src, "World!"); strcpy(dest, "Hello "); strcat(dest, src); printf("最终的目标字符串: %s", dest); return(0); }编译运行后,得到的结果如下:
最终的目标字符串: Hello World!
C语言strlen()函数
strlen() 函数用来求字符串的长度(包含多少个字符)。下面是 strlen() 函数的声明:int strlen(const char* str);参数 str 表示要求长度的字符串。返回值表示字符串 str 的长度。
strlen() 函数从字符串的开头位置依次向后计数,直到最后的 '\0',然后返回计数器的值。最终统计的字符串长度不包括 '\0'。
【实例】strlen() 函数的用法。代码如下:
#include <stdio.h> #include <string.h> int main() { char str[10] = "Hello!"; int len; len = strlen(str); printf("Length: %d\n", len); return 0; }编译运行后,得到的结果如下:
Length: 6
C语言strcmp()函数
strcmp() 函数用于对两个字符串进行比较(区分大小写)。下面是 strcmp() 函数的声明:int strcmp(const char* str1,const char* str2);参数 str1 和 str2 是参与比较的两个字符串。返回值有以下几种:
- 如果返回值 < 0,则表示 str1 小于 str2;
- 如果返回值 > 0,则表示 str2 小于 str1;
- 如果返回值 = 0,则表示 str1 等于 str2。
strcmp() 函数会根据 ASCII 值依次比较 str1 和 str2 的每一个字符,直到出现不一样的字符,或者到达字符串末尾的 '\0'。
【实例】字符串比较函数。代码如下:
#include <stdio.h> #include <string.h> int main() { char str1[50] = "Hello"; char str2[50] = "World"; if(strcmp(str1, str2)>0) printf("str1 is bigger"); else if (strcmp(str1, str2) == 0) printf("str2 and str1 is equal"); else printf("str2 is bigger"); return 0; }编译运行,结果如下:
str2 is bigger
C语言strlwr()函数和strupr()函数
strlwr() 和 strupr() 函数分别返回给定字符串的小写和大写形式,它们的语法格式如下:char *strlwr(char *str); char *strupr(char *str);
【实例】字符串字符大小写转换。代码如下:
#include <stdio.h> #include <string.h> int main() { char str1[50] = "Hello"; char str2[50] = "World"; printf("Lower String is: %s\n", strlwr(str1)); printf("Uper String is: %s\n", strupr(str2)); return 0; }编译运行,结果如下:
Lower String is: hello
Uper String is: WORLD
C语言strstr()函数
strstr() 函数的语法格式如下:char *strstr(const char *source, const char *des);用于在字符串 source 中查找第一次出现字符串 dec 的位置,但不包含终止符 '\0'。
【实例】字符串子串匹配函数。
#include <stdio.h> #include <string.h> int main() { char str1[50] = "Hello World!"; char str2[50] = "World"; char *str; str = strstr(str1,str2); //获取str2所在位置指针 printf("子串后面是: %s\n", str); printf("子串在源字符串的起始位置是: %d\n", str-str1); return 0; }编译运行后,得到的结果如下:
子串后面是: World!
子串在源字符串的起始位置是: 6