连接两个字符串 C++
concatenating two strings c++
>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++; );
你的代码超过了str1
和str2
的末尾,包括它们的空终止符。复制 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++; }
当str1
或str2
结束时,即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;
}
相关文章:
- 两个字符串在 c++ 中不相等
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 比较两个字符串后卡在无限循环中
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 两个字符串之间的数学运算
- sscanf() 有两个字符串参数
- 我的字符串数组一次打印出前两个字符串
- 两个 c++ 字符串上的异或
- 函数返回两个字符串的第一个常用字符
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 给定两个字符串 S 和 T.确定与 T 相差最小的 S 子字符串?
- gtest:检查字符串是否等于两个字符串之一
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 我可以在系统()中使用两个字符串吗?