我在将String转换为大写函数时遇到问题。我现在有两个功能,反词和大写。反向当前有效并且向后输出信息,但是由于某种原因,大写不会。我有一个菜单,允许用户输入一个单词,然后选择反向还是将其更改为大写
这是大写功能的代码片段。
string Upperword(string originalString){
string localString;
int len = originalString.length();
for (int i = 0 ; i << len; i++)
localString = toupper(originalString[i]);
return localString;
}
有人知道为什么它不会以大写形式输出单词吗?
答案 0 :(得分:3)
正如其他人指出的那样:
i << len
不正确。该表达式会将i左移。最终创建未定义的行为。我确定你是这个意思:
i < len
此行可能无法编译:
localString = toupper(originalString[i]);
您正在尝试将字符分配给字符串。您要附加到字符串。
您可能想要更接近此的东西
string Upperword(const string& originalString)
{
string localString;
int len = originalString.length();
for (int i = 0 ; i < len; i++)
{
localString += toupper(originalString[i]);
}
return localString;
}
答案 1 :(得分:3)
撇开错字i << len
,您不断地将字符逐个字符重新分配给返回的字符串; std::string
提供的极其庞大的功能列表消除了任何编译器诊断。
更好的方法是
#include <algorithm>
std::string Upperword(std::string originalString){
std::string localString = std::move(originalString);
std::transform(
localString.begin(),
localString.end(),
localString.begin(),
[](unsigned char c){return std::toupper(c);}
);
return localString;
}
答案 2 :(得分:0)
localString.resize(originalString.length());
。i<len
,最好len和i都应为size_t类型