踏破铁鞋无觅处,得来全不费功夫。假作真时真亦假,无为有处有还无。晨兴理荒秽,带月荷锄归。蚍蜉撼大树,可笑不自量。燕山雪花大如席,片片吹落轩辕台。C语言中提供了许多用来处理字符串的函数,使用这些函数可以大大减轻我们的工作量。
一、puts和gets
1、puts函数
该函数将一个以'\0'结尾的字符串输出到屏幕上,例如:
char a[] = "Welcome to";
char *p = "Linux C Program";
puts(a);
puts(b);
将输出:
Welcome to
Linux C Program
2、gets函数
从终端输入一个字符串到字符数组中,它的返回值是该字符数组的首地址,例如:
char string[20];
gets(string);    //从键盘输入computer
puts(string);
则输出:
computer
二、strcpy和strncpy
#include <string.h>
char *strcpy(char *dest,char *src);
char *strncpy(char *dest,char *src,int n);
说明:(1)strcpy是string copy的缩写。使用这两个函数时须包含头文件string.h。这两个函数的返回值都是参数dest。(2)strcpy把src所指向的以‘\n'结尾的字符串复制到dest所指的数组中。strncpy把src所指向的以'\0'结尾的字符串的前n个字节复制到dest所指的数组中。(3)dest所指向的数组必须足够大,以便容纳被复制的src所指向的字符串。复制时连同字符串的'\0'一起被复制。(4)以下代码是错误的:
char a[] = "Linux C Program",b[20];
b = a;
不能将一个字符串常量或字符数组直接赋给另一个字符数组。字符串的复制只能使用strcpy、strncpy或者其他类似功能的函数。(5)strcpy是不安全的,存在安全漏洞,容易被黑客所利用。因此一般应该使用strncpy。
示例代码:
char *s = "Hello World";
char d1[20],d2[20];
strcpy(d1,s);
strncpy(d2,s,sizeof(s));
sizeof(s)获得s所指向的字符串的长度,这里sizeof(s)等于12,因为字符串"Hello World"最后的'\0'也是一个字符。
三、strcat和strncat
#include <string.h>
char *strcat(char *dest,char *src);
char *strncat(char *dest,char *src,int n);
说明:(1)strcat是string catenate(字符串连接)的缩写。这两个函数所在的头文件都是string.h,都以参数dest的值作为返回值。(2)strcat把src所指向的字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。strncat把src所指向的字符串的前n个字符添加到dest结尾处(覆盖dest结尾处'\0')并添加'\0'.(3)dest所指向的数组必须足够大,以便容纳连接后的新字符串。(4)strcat是不安全的,存在安全漏洞,容易被黑客所利用。因此一般应该使用strncat。示例代码:
char d[20]="Hello ";
char *s="World";
strcat(d,s);
四、strcmp和strncmp
#include <string.h>
int strcmp(char *s1,char *s2);
int strncmp(char *s1,char *s2,int n);
说明:(1)strcmp是string compare(字符串比较
)的缩写。这两个函数所丰的头文件都是string.h,其功能是比较两个字符串。(2)strncmp只对两个字符串的前n个字符进行比较。字符串的比较规则是:从左到右逐个字符进行比较,直到出现不同的字符或遇到‘\0'为止。如果全部字符都相同且长度一样,则认为两个字符串相等,返回值为0。如果出现不相同的字符,则对第一次出现的两个不相同的字符进行比较。比较方法是以s1的第一个不相同的字符减去s2的第一个不相同的字符,以所得的差值作为返回值,例如:
strcmp("aab","aaB"),第一次不相同的字符为“b“,和”B“,”b“的ASCII码为98,“B”的ASCII码为66,因此“aab“>“aaB“,返回值为一正数,通常为1。"compare"<"computer",因为“a"<"u",返回值为一负数,通常为-1。示例代码:
char *s1 = "compare";
char *s2 = "computer";
if (strcmp(s1,s2) == 0)
printf("compare = computer");
else if (strcmp(s1,s2) > 0)
printf("compare > computer");
else
printf("compare < computer");
五、strlen
#include <string.h>
int strlen(char *s);
说明:(1)strlen是string length的缩写。它所在的头文件是string.h,功能是返回字符串的长度。(2)strlen返回的字符串实际长度,不包括'\0'在内,例如:
char string[10] = "China";
printf("%d\n",strlen(string));
输出的结果不是字符数组长度10,也不是6,而是5。
六、strlwr和strupr
#include <string.h>
char *strlwr(char *s);
char *strupr(char *s);
说明:(1)strlwr是string lower的缩写,strupr是string upper的缩写。使用它们前必须包含头文件string.h。(2)strlwr将s所指向的字符串中所有的大写字母都转换成小写字母。strupr将s所指向的字符串中所有的小写字母都转换成大写字母。它们的返回值都是转换后的字符串的指针。示例代码:
char string[10] = "China";
printf("%s\n",strlwr(string));
printf("%s\n",strupr(string));
输出:
china字符串和函数是什么
CHINA
七、strstr和strchr
#include <string.h>
char *strstr(char *s1,char *s2);
char *strchr(char *s1,char *s2);
说明:(1)strstr是string string的缩写,strchr是string char的缩写。使用它们前必须包含头文件string.h。(2)strstr从字符串s1中寻s2第一次出现的位置,返回指向第一次出现s2位置的指针,如果没到则返回NULL。strchr查字符串s中首次出现字符c的位置,返回首次出现字符c的指针,如果s中不存在c则返回NULL。
示例代码:
char *s1 = "Linux C Program",*s2 = "nux",*p;
p = strstr(s1,s2);
if (p != NULL)
printf("%s\n",p);
else
printf("Not Found!");
p = strchr(s1,'C');
if (p != NULL)
printf("%s\n",p);
else
printf("Not Found");
输出:
nux C Program
C Program
年年岁岁花相似,岁岁年年人不同。春城无处不飞花,寒食东风御
柳斜。不戚戚于贫贱,不汲汲于富贵。五岭逶迤腾细浪,乌蒙磅礴走泥丸。安能摧眉折腰事权贵,使我不得开心颜。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。