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