簡體   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