继续提升吧!
字符串
在C语言中,没有字符串型数据,只能用字符数组和字符指针来处理字符串。
如:
char ca[10]={‘h’,’e’,’l’,’l’,’o’,’\0’};
或
char ca[10]={“hello”};
或
char ca[10]=”hello”;
都表示ca这个字符串中有10个字符(包括\0)。后面多出的元素自动补\0。但是运算中出现ca=”string!”;这样的赋值语句是不合法的,后期赋值只能使用循环轮循数组元素,一个一个写入。或者用字符串处理函数进行赋值。
字符串的输入输出
printf和scanf
格式控制符为%s /*s为string的意思*/
与字符型数据处理不同的是,用%s后面的变量一定是数组名。
如:
char ca[10]={“hello”};
printf(“%s\n”,ca); //输出字符串的时候,只写变量名称,不要这样写。如:ca[5]
printf中可以在s前面加数字和正负号:
printf(“%8s”,ca); // %8s 的意思是:输出的结果如果不够八位,补 空格
系统会自动在左边补空格,输出结果为:□□□hello
加负号
printf(“%-8s”,ca);
系统会自动在右边补空格,输出结果为: hello□□□
scanf在s前面加数字,意义完全不同,也不能加正负号:
scanf(“%3s”,ca);
输入:
abcde(回车)
电脑会自动截取前面3个字符对ca赋值,ca的值为”abc”。
puts和gets
格式:
puts(字符数组名);
gets(字符数组名);
如:
char ca[10];
gets(ca);
puts(ca);
注意:gets可以接收空格和TAB键,scanf不可以。
字符串处理函数
strcpy(s1,s2):复制(目标串,源串) //相当于赋值,把s2的值赋值给s1
strcat(s1,s2):连接(目标串,源串) // 连接的意思是: 假如 s1 = "ab" s2 = "cd" ,执行函数以后的结果是: s1 = "abcd"; s2 = "cd";
int strlen(s):求长度(字符串),返回长度 //长度是整型 假如:s = "abc"; 返回的 leng = 3
int strcmp(s1,s2):比较(串1,串2),返回值>0,表示s1>s2;=0,表示s1=s2;<0表示s1<s2
程序1
// 10_1.字符串处理函数 #include <stdio.h> void main() { char ca[5] = "str1"; //声明字符串两种不同的格式。 char cb[5] = { "str2" }; char cc[10]; strcpy(cc,ca); printf("复制串:cc = %s\n", cc); strcat(cc,cb); printf("连接串:cc = %s\n", cc); printf("cc.leng = %d\n", strlen(cc)); //字符串的长度 printf("比较 ca 和 cb 大小 = %d\n", strcmp(ca, cb)); }
程序2
//用户输入若干个大写字母,将这些大写字母转换成小写字母输出。 #include <stdio.h> void main() { //用户输入大写字母转换成小写字母 char inputAlphabet[100]; //用户输入的字符 printf("请输入大写字母:"); gets(inputAlphabet); for (int i = 0; i < strlen(inputAlphabet); i++) { if (inputAlphabet[i] >= 65 && inputAlphabet[i] <= 90) { printf("%c", inputAlphabet[i] + 32); } else { printf("退出,重新输入!"); exit(); } } }