大写函数C ++

时间:2019-03-21 16:05:33

标签: c++ c++11 uppercase

我在将String转换为大写函数时遇到问题。我现在有两个功能,反词和大写。反向当前有效并且向后输出信息,但是由于某种原因,大写不会。我有一个菜单,允许用户输入一个单词,然后选择反向还是将其更改为大写

这是大写功能的代码片段。

string Upperword(string originalString){
    string localString;
    int len = originalString.length();

    for (int i = 0 ; i << len; i++)
        localString = toupper(originalString[i]);

    return localString;
}

有人知道为什么它不会以大写形式输出单词吗?

3 个答案:

答案 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)

  1. 您需要先设置localString的大小。它生成为空,因此设置其元素将使其崩溃。可以在执行任何操作之前先将其设置为localString.resize(originalString.length());
  2. 条件应为i<len,最好len和i都应为size_t类型
  3. 请记住,toupper取决于当前的语言环境,请不要忘记将其设置在某个地方。