[英]concatenating two strings c++
我试图在不使用+运算符的情况下将两个字符串粘在一起,也使用循环来解决问题。问题是当它读取两个字符串后,它无法打印第二个字符串而只出现第一个字符串。 这是我的代码,这段代码就像复制两个字符串一样。
char str1[MAX];
char str2[MAX];
cout<<"Enter The first String:\n";
cin.getline(str1,MAX,'\n');
cout<<"Enter the second String:\n";
cin.getline(str2,MAX,'\n');
char str3[2*MAX]; int k=0;
for(int i=0;i<MAX;i++)
{ str3[k]=str1[i]; k++; }
for(int j=0;j<MAX;j++)
{ str3[k]=str2[j]; k++; }
str3[k]='\0';
cout<<endl<<"Here is the concatenated string:\n";
cout<<str3<<endl;
最好使用指针编写这样的代码。
所以我会替换这个错误的代码
char str3[2*MAX]; int k=0;
for(int i=0;i<MAX;i++)
{ str3[k]=str1[i]; k++; }
for(int j=0;j<MAX;j++)
{ str3[k]=str2[j]; k++; }
str3[k]='\0';
以下
char str3[2 * MAX];
char *p = str3;
char *q = str1;
while ( *p = *q++ ) ++p;
q = str2;
while ( *p++ = *q++ );
也可以使用for循环编写相同的内容。 例如
char str3[2 * MAX];
char *p = str3;
for ( char *q = str1; *p = *q++; ++p );
for ( char *q = str2; *p++ = *q++; );
您的代码超过了str1
和str2
的末尾,包括它们的null终止符。 一旦复制了srt1
的null终止符, srt1
中的C字符串str3
被认为是完整的,因此str2
部分被忽略。
你需要修改第一个循环,一旦它在str1
看到'\\0'
就停止,并从那个点开始复制str2
。 对第二个循环执行相同的操作。 您的代码已经添加了null终止,因此结果将是正确的:
for(int i=0;i<MAX && str1[i] != '\0';i++)
{ str3[k]=str1[i]; k++; }
for(int j=0;j<MAX && str2[j] != '\0';j++)
{ str3[k]=str2[j]; k++; }
注意:我假设这是一个学习练习,不允许你使用std::string
。
正确的代码应该是: -
char str3[2*MAX];
int k=0;
for(int i = 0; str[i] != '\0'; i++)
{
str3[k]=str1[i];
k++;
}
for(int j=0 ; str2[j] != '\0'; j++ )
{
str3[k] = str2[j];
k++;
}
str3[k]='\0';
你没有考虑null终结符,因此阅读过去。
改变这个:
for(int i=0; str1[i] ;i++)
{ str3[k]=str1[i]; k++; }
for(int j=0; str2[j] ;j++)
{ str3[k]=str2[j]; k++; }
当str1
或str2
结束时,你必须停止连接,即str1[i]
或str2[j]
将为0 ('\\0')
。 但是你在循环MAX
。 这就是你的程序产生错误输出的原因。
希望你现在明白:)
@dasblinkenlight解释了为什么这在她/他的答案中不起作用。
这是使用标准C(++)库函数strcat
定义的另一种解决方案。 见http://www.cplusplus.com/reference/cstring/strcat/
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
char str1[MAX];
char str2[MAX];
cout << "Enter The first String:" << endl;
cin.getline(str1, MAX);
cout << "Enter the second String:" << endl;
cin.getline(str2, MAX);
char str3[2 * MAX];
strcat(str3, str1);
strcat(str3, str2);
cout << endl << "Here is the concatenated string:" << endl
<< str3 << endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.