繁体   English   中英

连接两个字符串c ++

[英]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++; );

您的代码超过了str1str2的末尾,包括它们的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++;    }

str1str2结束时,你必须停止连接,即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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM