[英]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.