c++如何让字符串重复输出_2020.10.02错题总结之字符串相关函数

ffd73afa8bcdfc907093703dd6f919c1.png

C/C++每日总结

ebe1b849ef35d88b65d9f1613e28241d.png

点击上方「嵌入式龙憨憨」,选择「置顶/星标公众号」第一时间查看编程笔记!

3b115e23ed297c4bece82e1869e7451c.png

特别设置【每日总结】专栏:

对专业课--C/C++的复习刷题进行总结,归纳错题知识点,记录知识点掌握不足的部分,并进行相应的知识拓展,巩固基础,回顾知识,共同进步,加油!

ef15d166b83d7426581c8e0c4539a6dc.png

1

错题总结

dc11d600619fcfc784e5969b66de4c0b.png

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

知识点解析

dc11d600619fcfc784e5969b66de4c0b.png

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。

长按图片关注 5e1aac611779e2c37f1738582e690e74.png

cd45314d437eb02fef64d536c25bd7db.png

分享技术,码字不易

转发、在看就是我最大的动力

置顶/星标公众号,和我一起学习吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值