C语言字符串
'a','b','c',这些都是字符,字符都是保存单个的字母
那么我想保存多个字母怎么办??例:abc
但是C语言中没有字符串类型
用数组就可以一个变量保存多个字符
例:charstr[3] = {'a','b','c'};
如果要输出全部内容,必须使用for循环,很不方便。
那么有没有一种简约的方式,让我们一下子就能输出呢?
有!
但是需要改两个地方!
1.长度要+1
2.末尾要加一个'\0'
然后用 %s就可以输出了!%s输出:字符串的
字符串:把多个字符连在一起就叫字符串。但是在C语言中要正确正确描述字符串,必须说成:一串以'\0'结尾的字符集合
例:
char str[3] = {'a','b','c'};
只能称之为字符数组,因为无法用%s正确输出
char str[4] = {'a','b','c','\0'};
才能称之为字符串,可以用%s正确输出
定义字符串语法:
第一种:
char 数组名[实际长度+1] ={ 'a','b','c','\0' };
第二种:
char str[] = {'a','b','c','\0'};//长度
第三种:
char 数组名[实际长度+1] ="字符串";
例: char str[4] = "abc";
注意:不需要加\0,编译器自动帮我们加
第四种:
char 数组名[]= "字符串";
例: charstr[] = "abc";
字符串的常用方法和函数:
字符串输出:
printf 加%s 可以输出
puts(字符串):也可以输出
区别:1.puts不需要格式化控制符,printf需要
2.puts只能输出字符串,printf其他类型都可以输出
3.puts自带换行,printf没有自带换行
例如: char str[] ="abc";
puts(str);
printf("%s",str);
字符串输入:
scanf + %s 可以输入
gets 也可以输入
区别:1.gets只能输入字符串,scanf什么格式都能输入
2.gets不用加%s scanf要加%s
例如: char str[50];
scanf("%s",str);
gets(str);
puts(str);
puts 和 gets都是在stdio.h里面
字符串其他函数: 都是在string.h头文件
1.strcmp
语法:strcmp(字符串1,字符串2);
比较两个字符串谁大谁小。
是比较字符串1是否比字符串2大,如果比字符串2大,返回正数(差值),如果比字符串2小,返回负数(差值),如果一样返回0
按照字符串第一个字母进行比较,如果第一个字母不等,那么就直接返回结果
如果第一个字母相等,那么就继续比较第二个字母,如果第二个字母还相等就继续比较第三个字母,依次类推
主要比较两个字符串是否相等
例如: char str1[] ="abc";
char str2[] = "adc";
printf("%d\n",strcmp(str1, str2));//-2
2.strcpy
语法:strcpy(字符数组,字符串2);
把字符串2的内容,复制到字符数组,如果字符数组里面原来就有内容,就会覆盖
注意:左边的那个只能传字符数组,不能字符指针
例如: char str[50] ="abc";
strcpy(str, "哈哈哈");
puts(str);
3.strcat:
语法:strcat(字符数组,字符串2);
把字符串2的内容接道字符数组原实际的内容的后面
例如: char str[50] ="abc";
printf("%d %d\n",str[0],str[1]);
strcat(str, "哈哈");
puts(str);//abc哈哈
4.strlen:
语法:strlen(字符串);
计算实际字符长度的,'\0'不参与计算,注意:一个中文占3个字节,那么用它计算中文的话,会用中文的实际个数*3
原理是:计算实际字符串占用的字节数
例如: charstr[50] = "哈哈";
unsigned long len = strlen(str);
printf("%lu\n",len);//6