大写函数C ++

问题描述 投票:-5回答:3

我的转换字符串到大写函数有问题。我现在有两个函数反向字和大写字母。反向当前工作并向后输出信息但由于某种原因,大写不会。我有一个菜单,允许用户输入一个单词,然后选择反转或将其更改为大写

这是一个用于大写函数的代码片段。

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

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

    return localString;
}

有人知道为什么它不会输出大写格式的单词?

c++ c++11 uppercase
3个回答
3
投票

正如其他人指出的那样:

 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;
 }

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;
}

0
投票
  1. 您需要先设置localString的大小。它生成为空,因此设置其元素将使其崩溃。在你做任何事之前,这可以作为localString.resize(originalString.length());来完成。
  2. 条件应该是i<len,最好len和i都应该是size_t类型
  3. 请记住,toupper取决于当前的区域设置,不要忘记设置某个位置。
© www.soinside.com 2019 - 2024. All rights reserved.