连接两个字符串 C++

concatenating two strings c++

本文关键字:两个 字符串 C++ 连接      更新时间:2023-10-16

>im 试图在不使用 + 运算符的情况下将两个字符串粘在一起,也使用循环来执行此操作。问题是在读取两个字符串后,它无法打印第二个字符串,只出现第一个字符串。这是我的代码这段代码就像将两个字符串合二为一。

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]='';
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]='';

对于以下

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++; );

你的代码超过了str1str2的末尾,包括它们的空终止符。复制 srt1 的空终止符后,str3 中的 C 字符串被认为是完整的,因此str2部分将被忽略。

您需要修改第一个循环,一旦它在str1中看到''就停止,并从该点开始复制str2。对第二个循环执行相同的操作。您的代码已经添加了 null 终止,因此结果将是正确的:

for(int i=0;i<MAX && str1[i] != '';i++)
{ str3[k]=str1[i];  k++;    }
for(int j=0;j<MAX && str2[j] != '';j++)
{ str3[k]=str2[j];  k++;    }

注意:我假设这是一个学习练习,您不得使用std::string

正确的代码应该是:-

char str3[2*MAX];   
int k=0;
for(int i = 0; str[i] != ''; i++)
{
  str3[k]=str1[i];  
  k++;    
}
for(int j=0 ; str2[j] != ''; j++ )
{ 
   str3[k] = str2[j];  
   k++;   
}
str3[k]='';

您没有考虑空终止符,因此阅读了它。

更改此内容:

for(int i=0; str1[i] ;i++) 
{ str3[k]=str1[i];  k++;    }
for(int j=0; str2[j] ;j++)
{ str3[k]=str2[j];  k++;    }

str1str2结束时,即str1[i]str2[j]
时,您必须停止连接将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;
}