簡體   English   中英

C++ String Subcript Out of Range when using string.length() as end of for loop

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM