为了账号安全,请及时绑定邮箱和手机立即绑定

请问这哪里错了5255 一直找不到错误

请问这哪里错了5255 一直找不到错误

C++
慕斯7376262 2018-04-14 19:07:20
#include<iostream> #include<assert.h> using namespace std; int str_len(char*p); char *str_cat(char*p1, char*p2) { assert(*p1!='\0'&&*p2!='\0'); char *address = p1; while(*p1++!='\0'); while((*p1++=*p2++)!='\0') ;  return address; } int main() { int flag; char s1[40]="l am a chinese",*s2="l love China"; flag=str_len(s1)-str_len(s2); if(flag>0) cout<<(str_cat(s1,s2)); else  cout<<str_cat(s2,s1); } int str_len(char*p) { int n=0; assert(*p!='\0'); while(*p!='\0') { if('a'<=*p&&*p<='z'||'A'<=*p&&*p<='Z') n++; p++; } return n; }
查看完整描述

2 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

虽然你没有说明遇到了什么样的问题。但这个代码看起来没有重大的影响编译的错误,所以应该是能够编译的。


我猜,str_cat 函数的结果看起来并没有把两个字符串拼接上,是吗?

第 9 行的 while,我知道你是为了找到 p1 所指字符串结尾的 '\0'。但是当 p1++ 表达式指向 '\0' 时,while 会退出循环,可别忘了 p1 还会自增,所以 p1 最后会指向 '\0' 的后一位。

于是最终拼接好的字符串中,在 s1 和 s2 之间仍夹着 s1 原来结尾的 '\0'。

由于 C++ 中规定字符串以 '\0' 结尾,所以 cout 只会打印出"l am a chinese"



还有一些细节上的问题:

第16行 *s2="l love China"。等号右侧是字符串字面量,C++ 视其为字符串常量,C++ 标准不允许将字符串常量赋值给普通字符指针。 似乎大多数编译器对此只是给出警告,如果你的编译器严格到在这里报错的话……那这里就也算错误。  不过确实应该避免这样的用法。

第 2 行,C++ 代码中应该用 C++ 风格的头文件<cassert>

查看完整回答
1 反对 回复 2018-04-16
?
lookx

TA贡献1条经验 获得超0个赞

因为第一个white中 p1跳出来后*p1=='\0';将代码改成如下即可

#include<iostream>

#include<assert.h>

using namespace std;

int str_len(char*p);

char *str_cat(char*p1, char*p2)

{

    assert(*p1!='\0'&&*p2!='\0');

    char *address = p1;

    while(*p1!='\0')

{p1++;

};

*p1++=' ';

    while((*p1=*p2)!='\0')

{p1++;p2++;

} ; 

    return address;

}

int main()

{

    int flag;

    char s1[40]="l am a chinese",*s2="l love China";

    flag=str_len(s1)-str_len(s2);

    if(flag>0) cout<<(str_cat(s1,s2));

    else  cout<<str_cat(s2,s1);

}

 

int str_len(char*p)

{

    int n=0;

    assert(*p!='\0');

    while(*p!='\0')

    {

        if('a'<=*p&&*p<='z'||'A'<=*p&&*p<='Z') n++;

        p++;

    }

    return n;

}


查看完整回答
反对 回复 2018-05-29
  • 2 回答
  • 0 关注
  • 870 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号