字符串
C语言
字符串实际上就是以null字符'\0'结尾的一维数组。'\0'是系统自动添加作为该字符串结束的标识符。
例:字符串"hello"总共有五个字符,但实际上是占据了六个字节。
C语言中,字符变量是用char定义的,但是C中没有储存字符串的数据类型。所以C中一般通过字符数组和字符指针来存储。
字符数组输入和输出:
scanf:%c和%s两种类型。%c可以将空格还有换行符输入,%s则是遇空格及换行符结束,%s输入不用加&。
getchar()、putchar()单字符输入输出。有时候多次输入之间需换行的话,有时候需要多加一个getchar()来吸收回车符。
gets()和puts()用来输入和输出一行字符串,以换行符作为输入结束。输出的时候会自动紧跟一个换行符。
注意:字符数组末尾是以'\0'结尾的,scanf的%s和gets会自动在末尾添加'\0',但%c,getchar则不会,所以要注意手动添加。
操作字符串的函数
函数 | 作用 | |
---|---|---|
1 | strcpy(a,b) | 复制字符串b至字符串a |
2 | strcat(a,b) | 将字符串b连接至a的尾部 |
3 | strlen(a) | 返回字符串a的长度 |
4 | strcmp(a,b) |
如果a=b,则返回0 如果a<b,则返回小于0 如果a>b,则返回大于0 |
5 |
strchr(a,'s')
strrchr(a,'s') |
返回的是一个指针; strchr是从左至右指向字符's'在字符串a中第一次出现的位置 strrchr则是从右至左指向字符's'在字符串a中第一次出现的位置 如果‘s’不存在则返回NULL |
6 | strstr(a,b) |
返回一个指针 指向字符串b在a中第一次出现的位置 |
下面对部分函数进行进一步的解释:
- strlen函数和sizeof的区别
两者虽然都可以计算字符串的长度,但是区别还是相当的大。
一:从用处方面来说
strlen是专门针对计算字符串的函数,而sizeof作为单目运算符,它的参数可以是数组、指针、函数等等
返回长度
strlen作为函数,它遇到'\0'结束返回字符串的长度,但是sizeof则是把结束符'\0'计算在内。
例:
char s1[] = "abcdefghuijklmn";
printf("strlrn函数返回的字符长度是%d\n",strlen(s1));
printf("sizeof返回的字符长度是%d\n",sizeof(s1));
//////////////////////////////
输出:
strlrn函数返回的字符长度是15
sizeof返回的字符长度是16
返回类型
strlen函数返回的是size_t 类型(即无符号整型),所以在一些条件判断中使用要格外的小心
例:
if(strlen(a)-strlen(b)>=0)
因为返回的是unsigned int型,所以if条件句里永远是真
- strchr
上面表格中已经介绍了,strchr函数返回的是一个指针;
char s2[] = "3asdasdasdas";
char *q = strchr(s2,'d');
printf("%s\n",q);
///////////////////////////
输出: dasdasdas
从上面可以看出它是从左至右开始查找目的字符,若查找成功返回的值是从目的字符向右到结束的字符串。
- strrchr
它是从右至左开始查找目的字符,返回的同样是从目的字符向右到结束的字符串。
char s2[] = "3asdasdasdas";
char *q = strrchr(s2,'d');
printf("%s\n",q);
///////////////////////////
输出:das
- strstr
strstr函数同样返回的是一个指针,strstr查找的是字符串
例:
char s2[] = "3asdasdasdas";
char *q1 = strstr(s2,"das");
printf("%s\n",q1);
////////////////////////////
输出: dasdasdas
gets()/puts()-----》数组函数
gets可以把空格一块输入,puts输出完的时候自动跟一个换行符。
sscanf&sprintf
char str[100] = "203200:132.12,nice!",str2[100],str3[100];
int n;
double db;
//sscanf是把字符数组str里面的内容赋值给其他的部分
sscanf(str,"%d:%lf,%s",&n,&db,&str2);
//sprintf是把其他的内容赋值给字符数组str3
sprintf(str3,,"%d:%lf,%s",&n,&db,&str2);