运行结果有点点不对
#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、定义两个字符串
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代表字符串的结束符。如果解决您的问题请采纳,祝学习愉快!
- 参与学习 529 人
- 提交作业 110 份
- 解答问题 594 个
无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星