gpt4 book ai didi

c++ - 使用string.length()作为for循环的结尾时,C++字符串下标超出范围

转载 作者:行者123 更新时间:2023-12-01 14:42:49 24 4
gpt4 key购买 nike

我有一个C++函数,该函数应该迭代字符串中的字符并将其更改为小写。我将输入字符串的长度用作序列的末尾,该序列可在教科书中的示例函数中使用,但是在尝试通过以下方式实现时,出现“下标超出范围”错误:

#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]);

您还可以通过以下范围简化第一个循环:
string lowerCaseCopy;
for (auto c : str)
lowerCaseCopy.push_back(tolower(c));

关于c++ - 使用string.length()作为for循环的结尾时,C++字符串下标超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62003902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com