22.字符串
①字符串是位于双引号中的字符序列,在内存中以“\0"结束,所占字节比实际多一个
注意:可以把一个字符常量赋值给一个字符变量(char ch = 'a'),但不能把字符串常量赋给字符变量 char ch = 'a'
②用字符数组保存字符串:
1) char str1[4] = {"abc"}; str[0]用来存'\0';
2) char str2[4] = "abc"; //注意此处数组长度必须是>=4;
3) char str3[] = "helloworld!";
③字符串的输出
用%s输入字符串,从给定的地址开始,一直输出字符,直到遇到\0就停止了。
printf("/s\n",str); == printf("/s\n",&str[0]; // 都是取首地址
④字符串的输入
%s接收键盘上输入的一个字符串,保存在以str为首地址的字符数组中
scanf("%s",str);
注意:1)如果输入的字符串有空格,则空格之后的字符无法接收保存。以%s的格式输入,scanf遇到空格,就结束了。
2)输入的字符要小于数组的长度;
3)要合理使用字符串结束符"\0";
请大家注意数组类型的含义:数据类型指的是数组所包含的元素的类型,而不是数组名的类型,数组名永远是一个指针,指向第一个元素的地址,即数组首地址。
23.字符串函数
puts和gets 必须包含头文件 stdio.h
strcat 需要包含string.h
①puts 输出字符串
1)puts函数可以自动换行;
2)也可是不是首地址,可以是元素的地址;
3)必须是字符数组;
4)不可以格式化输出
②gets 输入字符串
1)使用gets会给出一个警告;
2)可以接收空格;
3)不安全:数组长度是100,但是你输入了120个也可以,但是越界;
③strcat 连接字符串
1)格式:strcat(a,b); // 把字符串b连接在字符串a之后
2)oldStr的长度要足够大,只要能够保存下oldStr+newStr;
3)newStr把oldStr的最后一个字符\0给覆盖了;
④strcpy 拷贝字符串
1)strcpy(old,new); 把new覆盖old里;
2)oldStr长度要足够长;
⑤strcmp 字符串的比较函数
1)strcmp(str1,str2); abc def(大) 规则:比较字符的ascii码值,比较在字典中出现的顺序
2)比较的过程:逐个去两个字符串的字符对应位相比较,从第一位不相同的位开始,就能确定字符串大小;
3)strcmp(str1,str2); 函数有返回值 >0 :str1>str2 <0 :str1<str2 =0 :str1 = str2
⑤strlen 计算字符串长度,不包含\0