C/C++每日总结
点击上方「嵌入式龙憨憨」,选择「置顶/星标公众号」第一时间查看编程笔记!
特别设置【每日总结】专栏:
对专业课--C/C++的复习刷题进行总结,归纳错题知识点,记录知识点掌握不足的部分,并进行相应的知识拓展,巩固基础,回顾知识,共同进步,加油!
1
错题总结
1、以下程序运行后,如果从键盘上输入:
book
book
则输出结果是( )
#include #include void main(){ char a1[80],a2[80],*s1=a1,*s2=a2; gets(s1); gets(s2); if (!strcmp(s1,s2)) printf("*"); else printf("#"); printf("%d\n",strlen(strcat(s1,s2))); }
A、*8 B、#9 C、#6 D、*9
正确答案:B
答案解析:
第1个回车将字符串"book"赋值给a1,第二个回车将"book"赋值给a2;
因此strcmp(s1,s2)的结果不相等,返回非0值,if语句括号中的条件!strcmp(s1,s2)结果为假,执行else分支输出“#”,strcat合并两个字符串,然后strlen测试字符串长度并输出两个字符串合并到a1中的字符个数为9。
2
知识点解析
1、gets()函数
基本形式:gets(char* )
从stdin流中读取字符串,接收到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
所以题目中的gets()函数使得a1的值为"book",a2的值为"book";‘\0’空字符并不包含在内。
2、strcmp()函数
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。
基本形式为strcmp(str1,str2)
当s1
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
1."A"
2."A"
3."Apple"
4."A"
5."compare"
明显"book"book",所以题目中返回负数,非0;
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
ANSI标准规定,返回值为正数,负数,0。而确切数值是依赖不同的C实现的。
当两个字符串不相等时,C标准没有规定返回值会是1或-1,只规定了正数和负数。
有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。
3、strcat()函数
基本形式:strcat(char *,const char *)
strcat函数是string catenate(字符串连接)的缩写,作用:将第二个字符数组中的字符串连接到前面字符数组的字符串后面。
所以题目中合并的字符串为"bookbook"。
4、strlen()函数
基本形式:strlen(const char*)
strcat函数是string length(字符串长度)的缩写,作用是测试字符串的实际长度,它求得方法是从开始到遇到第一个'\0',从首地址一直找下去,直到遇到'\0'停止。实际长度不包括‘\0’字符在内。
所以题目测试的是"bookbook"的长度,为9。
长按图片关注
分享技术,码字不易
转发、在看就是我最大的动力
置顶/星标公众号,和我一起学习吧