![](/img/trans.png)
[英]c++ string.length() out of range as string.at() parameters
[英]C++ String Subcript Out of Range when using string.length() as end of for loop
我有一個 C++ function 應該遍歷字符串中的字符並將其更改為小寫。 我使用輸入字符串的長度作為序列的結尾,它適用於教科書中的示例函數,但在嘗試在以下實現時給我一個“下標超出范圍”錯誤:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
string makeLower(const string& str);
int main() {
string userString, lowerCaseUserString;
cout << "Please enter a word: ";
cin >> userString;
lowerCaseUserString = makeLower(userString);
cout << lowerCaseUserString;
return 0;
}
string makeLower(const string& str) {
int i;
string lowerCaseCopy;
for (i = 0; i < str.length(); i += 1)
lowerCaseCopy[i] = tolower(str[i]);
return lowerCaseCopy;
}
有人可以解釋我做錯了什么嗎? 謝謝!
您的lowerCaseCopy
字符串為空,因此對其進行索引是未定義的行為。
您可以使用push_back
添加元素:
string lowerCaseCopy;
for (i = 0; i < str.length(); i += 1)
lowerCaseCopy.push_back(tolower(str[i]));
或者您可以在索引之前為其分配足夠的空間:
string lowerCaseCopy(str.length());
for (i = 0; i < str.length(); i += 1)
lowerCaseCopy[i] = tolower(str[i]);
您還可以使用 range-for 簡化第一個循環:
string lowerCaseCopy;
for (auto c : str)
lowerCaseCopy.push_back(tolower(c));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.