连接两个字符串c ++

时间:2014-12-21 13:15:42

标签: c++ string concatenation

我试图在不使用+运算符的情况下将两个字符串粘在一起,也使用循环来解决问题。问题是当它读取两个字符串后,它无法打印第二个字符串并且只显示第一个字符串。 这是我的代码 这段代码就像复制两个字符串一样。

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;

5 个答案:

答案 0 :(得分:4)

最好使用指针编写这样的代码。

所以我会替换这个错误的代码

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

答案 1 :(得分:2)

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

您需要修改第一个循环,以便在'\0'中看到str1后停止,并从该点开始复制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

答案 2 :(得分:2)

正确的代码应该是: -

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终结符,因此读过它。

答案 3 :(得分:0)

改变这个:

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 ('\0')。但是你正在循环MAX。这就是你的程序产生错误输出的原因 希望你现在明白:)

答案 4 :(得分:0)

@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;
}