我需要一些幫助來調試我的代碼。此代碼旨在將字符串中的單詞轉換爲句子形式[假設該字符串沒有「。」。最後]。出於某種原因,我得到的輸出是縮進的輸出,在第一個單詞之後加上一個額外的空格以及縮進的輸出減去第一個單詞。我是編碼方面的初學者;所以如果可能的話,我希望更易於理解的解決方案,或者使用循環,字符串和數組的解決方案。需要幫助調試我的代碼,以反轉字符串中的單詞
樣品輸入:
My name is Edward
預期輸出:
Edward is name My
輸出接收:
Edward is name
這裏是我到目前爲止的代碼:
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main() {
string s, n, a;
getline(cin, s);
for (int i = s.length(); i >= 0; i--){
if (s[i] != 32) {
n += s[i];
}
else {
for (int j = n.length() -1; j >= 0; j--){
a += n[j];
}
cout << a << ' ';
n.clear();
a.clear();
}
}
cin.ignore();
getchar();
return 0;
}
另外,我剛剛注意到最後還有一個額外的空間。如果有辦法可能取消輸出最後一個空格;請告訴我。
感謝您的閱讀,感謝您的幫助。
要反轉的話('的std :: string'變量)不是字符! –
's [s.length()]'超出了範圍,這是您的外部循環開始的範圍。這是未定義的行爲,但在我的測試中,它讓'n'有一個null作爲第一個字符,然後被複制,等等。調試器可以幫助你很多,讓你逐步瀏覽每一行,看看操作影響你的變量。 –
如果你修復了外循環中的界限錯誤,你的代碼主要起作用。問題在於你的'else'反轉了這個單詞,並且打印出來不會被最後一個單詞擊中,除非它以空格結束。考慮將內部循環分解爲它自己的函數,您可以在循環外用'n'調用來處理最終的單詞。 –