2017-01-24 20 views
0

私は、ユーザーに名字の入力を促す質問があります。最後と最初の名前をカンマとスペースで区切って保持するように3番目の配列を宣言します。ループを使用して名前を一度に1文字ずつ繰り返し、フルネーム配列に格納します。2つのcharまたはstring配列を1つの配列にどのように追加しますか?

それは簡単に聞こえますが、私はそれに非常に苦労しています。私はstrncpyやmemcpy、strncatのように質問しない方法であっても、複数の方法で試してみました。たぶん私はちょうど正しく理解していないでしょう。任意の助け

char FirstName[15]; 
char LastName[15]; 
char FirstLast[30]; 

cout << "Enter your first name: "; 
cin >> FirstName; 
cout << "Enter your last name: "; 
cin >> LastName; 


for (int i = 0; i<30; i++) 
{ 
    if (i < 15) { 
     FirstLast[i] = LastName[i]; 
    } 
    else { 
     FirstLast[i] = FirstName[i - 5]; 
    } 
} 


cout << FirstLast; 

感謝を:

これは私が現在持っているものです。

+3

なぜプレーンアレイを使用していますか?追加は['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)で非常に簡単です(バッファオーバーフローについて心配する必要はありません)。 –

+1

あなたが表示しているコードは、2つの問題があります。最初は 'FirstName [i - 5]'です。私は '5'ではなく' 15'を意味すると思いますか? 2番目の問題は、Cスタイルの文字列が*終了していることを忘れることです。ターミネータを確認したり、宛先に追加したりすることはありません。 –

+2

最後に、*配列で問題を解決するには、['std :: strcpy'](http://en.cppreference.com/w/cpp/string/byte/strcpy)と[' std :: strcpy' strcat'](http://en.cppreference.com/w/cpp/string/byte/strcat)を参照してください。 –

答えて

0

一つの可能​​な答えであるべきだろうbe:

// copy last name 
int i = 0; 
for (i = 0; LastName[i] != 0; ++i) 
    FirstLast[i] = LastName[i]; 

// add , and space 
FirstLast[i++] = ','; 
FirstLast[i++] = ' '; 

// append first name 
for (int j = 0; FirstName[j] != 0; ++j) 
    FirstLast[i++] = FirstName[j]; 

// Terminate the string 
FirstLast[i] = 0; 
0

使用std::string

string FirstName, LastName, FirstLast; 

cout << "Enter your first name: "; 
cin >> FirstName; 
cout << "Enter your last name: "; 
cin >> LastName; 

FirstLast = LastName + ", " + FirstName; 

cout << FirstLast; 
0
for (int i = 0; i<30; i++) 
{ 
    if (i < 15) { 
     FirstLast[i] = LastName[i]; 
     //if LastName is less than 15 characters then garbage and probably '\0' will be appended to FirstLast and this will mark end of FirstLast string. 
    } 
    //else { 
    // FirstLast[i] = FirstName[i - 5]; 
    //} 
} 

正しい方法は次のようになります。

int i = 0, j = 0; 
    while(LastName[j]) 
    { 
     FirstLast[i] = LastName[j];  
     ++i; 
     ++j; 
    } 
    FirstLast[i] = ','; 
    ++i; 
    FirstLast[i] = ' '; 
    ++i; 
    j = 0; 
    while(FirstName[j]) 
    { 
     FirstLast[i] = FirstName[j];  
     ++i; 
     ++j; 
    } 
    FirstLast[i] = '\0';   

勿論、LengthOf(FirstLast)は、ライブラリ関数のいずれかを使用することなく、少なくともLengthOf(FirstName) + LengthOf(LastName) + 2(for comma and space) + 1 (null terminating character)

関連する問題