问题0:字符串如何定义?
答: 在定义时赋值有三种方式。 也可以直接定义char s[5];不赋值
char s[5]=”SYSU”;
char s[5]={‘S’,’Y’,’S’,’U’};
char s[]=”SYSU”;
Tips: 1. 只有在定义时才能整体赋值一个字符串,后面只能逐位赋值。
比如 char s[5]; s[5]=”SYSU”; 不行。 后面想赋值必须要s[0]=’S’; s[1]=’Y’; ……这样了
- char s[]这种不写明空间长度的字符串,在定义时必须有赋值,否则编译错误。且它定义的空间长度就是它被赋值的字符串长度。
问题1:什么时候字符串末尾会自动添加结束符’\0’什么时候不会?
答:
如果你直接输入,或者用char s[5]=”SYSU”这种方式来定义,就会被在最后自动添加结束符。
如果你一位一位去依次赋值,或者定义时这样写:char s[5]={‘S’,’Y’,’S’,’U’},就不会自动在最末尾添加结束符。
Tips:结束符也占空间,所以如果定义char s[4]=”SYSU”会出错,因为自动添加的结束符没地方存了。
问题2:结束符有什么好处?
答:
只有包含结束符的字符串才能用各种字符串函数、以及直接进行整体的输出。
比如有了结束符才能直接printf(“%s”,str); 不然只能用循环挨个输出每一位。
实际操作中很多时候我们是一位一位去赋值字符串的,这是末尾不会自动添加结束符,我们最好手动添加一下。比如已知最后一位是n,我们就str[n+1]=’\0’;手动添加了结束符。
问题3:字符串长度怎么计算?
答:
两种方法。
- strlen()函数,它会计算从开头到第一个’\0’为止的长度,长度不包含’\0’。(所以前面说有结束符的作用) (!!用任何字符串相关的函数记得要开头文件string.h)
- sizeof(str)/sizeof(str[0]);(一般不使用,可能在理论题中出现)
它计算的是你定义的总长度大小。
比如char s[10]=”SYSU”经过它计算就是10。
char s[]=”SYSU”经过它计算是5。([]没规定位数,由右值决定定义几位。包括了结束符)
问题4:怎么读入中间包含空格的字符串?
答:
scanf读入字符串是遇到空格或换行就停止读入。
可以选择用gets()读入,它会读入一整行字符串无论中间是否有空格。
问题5:怎么判断两个字符串是否相等?
答:
不能直接s1==s2判断。
可以循环逐位判断,也可以用strcmp()函数判断。
strcmp(s1,s2) 如果两者相等则返回0