我正在閱讀一本編碼面試書,並遇到一個問題:用'%20'替換字符串中的所有空格。使用「%20」替換空格 - 字符串下標超出範圍
我試着在我的編譯器中運行這個解決方案,但得到這個錯誤:字符串下標超出範圍。所以,我查找了該錯誤的stackoverflow,並得到了一個解決方案,試圖追加新的字符+ =,而不是隻給字符串分配新的字符,但仍然產生相同的錯誤。
這是我的代碼。非常感謝您的時間!
void replaceSpaces(string &str)
{
int spaces = 0;
// Count number of spaces in original string
for (int i = 0; i < str.size(); i++)
{
if (str[i] == ' ')
spaces++;
}
// Calculate new string size
int newSize = str.size() + (2 * spaces);
str.resize(newSize); // thanks Vlad from Moscow
// Copy the chars backwards and insert '%20' where needed
for (int i = str.size() - 1; i >= 0; i--)
{
if (str[i] == ' ')
{
str[newSize - 1] = '0'; // += '0' didnt work
str[newSize - 2] = '2'; // += didnt work
str[newSize - 3] = '%'; // same
newSize = newSize - 3;
}
else
{
str[newSize - 1] = str[i]; // same
newSize--;
}
}
}
int main()
{
string test = "sophisticated ignorance, write my curses in cursive";
replaceSpaces(test);
cout << test << endl;
}
哪條線給出了超出範圍的錯誤?當你在一個調試器中遍歷你的代碼時,在發生這種情況之前變量的值是什麼? – Angew
爲什麼不使用STL字符串查找和替換? –
因教育目的 – Toumash