C学习-函数:字符串处理函数 puts gets strcat strcpy strcmp ...
gets(字符数组):字符串输入函数
函数功能:从终端读入字符串(包括空格符)到字符数组,直到遇到一个换行符为止。但换行符不作为串的内容,系统自动在串后加‘\0’。
返回值:字符数组的首地址。
gets( )函数和使用%s格式的scanf( )函数区别:
都是从键盘接受字符串
对于scanf( )函数,输入时“回车”或“空格”都是字符串结束标志;
对于gets( )函数,只有 “回车”才是字符串结束标志,“空格”则是字符串的一部分
gets() 和 puts() 例子:
#include <stdio.h> int main(int argc, char const *argv[]) { int waitag; char str[10]; printf("请输入一个字符串:"); gets(str); printf("你输入的字符串是:"); puts(str); scanf("%d", &waitag); return 0; }
结果
请输入一个字符串:he ni //gets 空格也是有效字符哦,scanf 的空格是结束标志 你输入的字符串是:he ni //puts 输出是有换行的
puts(字符数组):字符串输出函数
函数功能:从字符数组的首地址开始,依次输出内存中的字符,遇到第一个‘\0’则结束输出,并自动输出一个换行符。
返回值:无。
puts( )函数和使用%s格式的printf( )函数区别:
printf() 需要加 \n才能换行,puts 直接换行;
printf()可以加一些说明性文字,而且puts不能;如: printf("输入字符串为:%s\n", st); 而 puts(st);
strcat(字符数组1,字符数组2); 字符串连接函数
函数功能:字符数组2中的字符串追加到字符数组1中的字符串后面。
返回值:字符数组1的首地址。
说明:
#include <string.h> 需要头文件,不是标准函数
字符数组1的长度要足够大,字符串2要追加到他里面。
连接前两个字符串的后面都有一个’\0’,连接时将字符串1后面的’\0’取消,只在新串最后保留一个’\0’。
字符数组2追加到字符数组1,没有新生成字符串数组
例子:
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { int waitag; char str[10] = {"CH"}, str2[] = "woqu"; // 注意 str 的长度 一定要能容纳 str2 strcat(str, str2); printf("str 为:%10s\nstr2为:%10s", str, str2); scanf("%d", &waitag); return 0; }
结果为
str 为: CHwoqu str2为: woqu
strcpy(字符数组1,字符串2); 字符串拷贝函数
函数功能:将字符串2拷贝到字符数组1中去。如果字符数组1不为空,那么字符数组2覆盖它
返回值:字符数组1的首地址。
注意:
字符数组1长度要足够大,以保证能装入拷贝后的字符串。
"字符数组1"必须写成数组名形式(如st),“字符串2”可以是字符串常量("china")或已赋值的字符数组名。
拷贝时连同字符串后面的'\0'一起拷贝到字符数组1中。
不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。
例如:
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { int waitag; char str[10] = {"Chinao"}, str2[] = "woqu"; // str 有值,拷贝 后,会被覆盖 strcpy(str, str2); printf("str 为:%6s\nstr2为:%6s", str, str2); scanf("%d", &waitag); return 0; }
结果
str 为: woqu str2为: woqu
有 char s1[10],s2[ ]={"China"};
strcpy(s1,s2); 或者 strcpy(s1,"China"); //作用相同。
s1={“China”}; 或 s1=s2;则是不合法的。
strcmp(字符串1,字符串2):字符串比较函数
其中,字符串1、2为字符串常量或已赋值的字符数组名。
用法:
strcmp(s1,s2);
strcmp("China","Japan");
strcmp(s1,"China");
函数功能:按照ASCII码顺序比较两个字符串,比较结果由函数值带回。
返回值:
字符串1=字符串2,函数值为0。
字符串1>字符串2,函数值为一正整数(1)。可理解为 字符串1 包含 字符串2
字符串1<字符串2,函数值为一负整数(-1)。可理解为 字符串1 包含于 字符串2
字符串比较的方法是:依次对两个字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时即由这两个字符决定所在串的大小(字符大小的依据是其ASCII值)。
例子:
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { int waitag; char s1[] = {"China"}, s2[] = {"China"}, s3[] = "Chi", s4[10] = "Chinaaa", s5[] = "Chinz";; printf("s1和s2比较返回值=%3d\n", strcmp(s1, s2)); printf("s1和s3比较返回值=%3d\n", strcmp(s1, s3)); printf("s1和s4比较返回值=%3d\n", strcmp(s1, s4)); printf("s1和s5比较返回值=%3d\n", strcmp(s1, s5)); scanf("%d", &waitag); return 0; }
结果
s1和s2比较返回值= 0 // s1=s2 --> 0 s1和s3比较返回值= 1 // s1包含s3:s1 > s3 --> 1 s1和s4比较返回值= -1 // s1包含于s4: s1 < s4 --> -1 s1和s5比较返回值= -1 // 前4为相等,比第五位ASCII值:s1(a) < s4(z) --> -1
注意: 对两个字符串比较,不能用比较运算符。
strlen(字符数组):求字符串实际长度函数
函数功能:求字符串的实际长度,不是数组的长度(sizeof测的是数组的长度),不包括’\0’在内。
返回值:字符串的实际长度。
例如:
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { int waitag; char str[10] = {"China"}; printf("字符串长度为:%d\n字符数组长度为:%d", strlen(str), sizeof(str)); scanf("%d", &waitag); return 0; }
输出
字符串长度为:5 字符数组长度为:10
另外,strlen("China")也是合法的用法。
strlwr(字符串):字符串大写转小写函数
函数功能:将字符串中所有大写字母转换成小写字母。
返回值:字符串的首地址。
strupr(字符串):字符串小写转大写函数
函数功能:将字符串中所有小写字母转换成大写字母。
返回值:字符串的首地址。
共 0 条评论