2016-12-29 71 views
2

Challenge:給定2個輸入的字符串,輸出三行:切換字母

  1. 在每個字符串的字符數,用空格隔開;
  2. 串連在一起;
  3. 將字符串放在一起,用空格分隔,並將兩個字的第一個字母交換。

代碼我公司生產的:

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    // Complete the program 
    string firstString, secondString; 
    cin>>firstString>>secondString; 
    cout<<firstString.length()<<" "<<secondString.length()<<"\n"; 
    cout<<firstString<<secondString<<"\n"; 
    string wierdString; 
    wierdString = secondString[0]; 
    for (int i = 1; i <= firstString.length(); i++) { 
     wierdString += firstString[i]; 
    } 
    wierdString = wierdString + " " + firstString[0]; 
    for (int j = 1; j <= secondString.length(); j++) { 
     wierdString += secondString[j]; 
    } 
    cout << wierdString; 
    return 0; 
} 

測試用例:

輸入(stdin)
abcd ef
你的輸出(stdout)
4 2
abcdef
ebcd af
期望輸出
4 2
abcdef
ebcd af
編譯消息
錯誤答案


對於我(作爲初學者)來說,輸出看起來就像預期的輸出。我的代碼有問題(using namespace std;除外)會導致此問題無效嗎?我仍然是初學者,我想知道什麼是錯的。

+0

你可能正在輸出一些更多(不可見的)字符的地方。檢查換行符等 –

+0

@AlexanderTorstling我嘗試了將預期的輸出和收到的輸出複製到Notepad ++中,並打開所有隱藏的字符。他們似乎匹配(每行結尾的CR/LF)。 –

+0

爲什麼所有的循環代碼只是爲了交換值?有'std :: swap'可以爲你做到這一點。 'std :: swap(firstString [0],secondString [0]);' – PaulMcKenzie

回答

4

字符串s從0到s.length() - 1(含)索引。您正在迭代以下條件:i <= firstString.length()這意味着從字符串末尾讀取。

+0

這是問題!謝謝! –

+0

獲得的經驗教訓:不要相信記事本++ :)嘗試類似'od'或'xxd'來轉儲文件內容。對於勝利,我只知道xvi32。 –

2

代碼似乎工作正常,你也得到所需的輸出。我認爲沒有什麼可以出錯 enter image description here

+0

您在第二個輸出中有額外的空間。我沒有。這個問題通過記住'.length'屬性是0索引來解決 –