繁体   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