我的转换字符串到大写函数有问题。我现在有两个函数反向字和大写字母。反向当前工作并向后输出信息但由于某种原因,大写不会。我有一个菜单,允许用户输入一个单词,然后选择反转或将其更改为大写
这是一个用于大写函数的代码片段。
string Upperword(string originalString){
string localString;
int len = originalString.length();
for (int i = 0 ; i << len; i++)
localString = toupper(originalString[i]);
return localString;
}
有人知道为什么它不会输出大写格式的单词?
正如其他人指出的那样:
i << len
是不正确的。那个表达式会让我向左移动。最终创建未定义的行为。我确定你的意思是:
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;
}
抛开错字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;
}
localString.resize(originalString.length());
来完成。i<len
,最好len和i都应该是size_t类型