运行结果有点点不对

运行结果有点点不对

#include<iostream>
#include<string>
#include<assert.h>
using namespace std;

int str_cmp(const char *chr1, const char *chr2)
{
 assert((chr1 != NULL) && (chr2 != NULL));
 while ((*chr1) && (*chr1 == *chr2))
 {
  chr1++;
  chr2++;
 }

 return (chr1 - chr2);
}
/*字符串复制*/
char *str_copy(char *des, const char *src)
{
 assert((des != NULL) && (src != NULL));
 char *address = des;
 //while ((*des != '\0'))des++;
 while ((*des++ = *src++) != '\0');
 /*
 while(*src!='\0')
 {
  des= *src;                    //老师为啥我这样写运行结果就不对呢???
  des++;
  src++;
 }*/
 
 return address;
}
/*字符串拼接*/
char *str_copy1(char *des, const char *src)
{
 assert((des != NULL) && (src != NULL));
 char *add = des;
 while ((*des != '\0'))des++;
 while ((*des++ = *src++) != '\0');
 return add;
}

int main()
{
 char *s1 = "I am a chinese";
 char *s2 = "I love China";
 int a = 0;
 char ds[30];
 a = str_cmp(s1, s2);

 
 if (a < 0)
 {
  //str_copy(ds, s1);
   str_copy(ds, s1);
  //str_copy1(ds, s1);
  cout << str_copy1(ds, s2) << endl;
 }
 else if (a > 0)
 {
  cout << str_copy(ds, s2) << endl;
  cout << str_copy1(ds, s1) << endl;
 }

 return 0;
}

1:老师运行结果两个字符串直接有空格怎么显示。

2:老师就是我注解的地方,该是和注解前面语句等价的吧???但是我那样写运行结果就不对了是怎么回事呢?????

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好,解决思路如下:

1、定义两个字符串

2、比较两个字符串的长度,根据结果连接字符串,并输出连接后的字符串

建议参考代码如下:

#include<iostream>
#include<string>
#include<assert.h>
using namespace std;
int str_len(const char *str)
//比较两个字符串的长度
{
assert(str != NULL);
int len=0;
while( *str++ != '\0')
{
len++;
}
return len;
}
char *str_cat(char *des,const char *src)
{
assert((des != NULL) && (src != NULL));
char *address = des;
while (*des != '\0') des++;
*des=' ';
des++;
while ((*des++ = *src++)!= '\0');
return address;
}
int main()
{
//定义两个字符串
char s1[]="I am a chinese";
char s2[]="I love China";
//比较两个字符串的长度,根据结果连接字符串,并输出连接后的字符串
if(str_len(s1)>=strlen(s2)){
cout<<str_cat(s1,s2);
}else{
cout<<str_cat(s2,s1);
}
return 0;
}

空格输出直接cout<<" " <<endl 或 者使用制表符。

注解地方和注解前面语句是不等价的*des != '\0'表示当目前指针des指向的字符不为零。

(*des++ = *src++) != '\0'表示 

将src赋值给*des,然后判断是不是已经到达\0(即字符串结尾),同时,执行完赋值后src和des指针均后移一位。总的结果即是:将src指向的内容复制到des,直到strSrc指向\0.
\0代表字符串的结束符。如果解决您的问题请采纳,祝学习愉快!

  • qq_华仔_5 提问者 #1
    while ((*des++ = *src++) != '\0'); while(*src!='\0') { * des= *src; des++; src++; } 老师就是这两个while在老师讲解中不是等效的吗??
    2018-04-04 22:54:30
  • qq_华仔_5 提问者 #2
    老师我在运行你给的参考程序老是报错呢?
    2018-04-04 22:57:49
  • qq_华仔_5 提问者 #3
    while (*des != '\0') des++; *des=' '; des++; 老师这段代码代表啥意思呢? while循环中des已经自加了为啥还要des++呢??
    2018-04-04 23:00:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
C++零基础入门 热门编程语言 二级考试必备
  • 参与学习       529    人
  • 提交作业       110    份
  • 解答问题       594    个

无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师