上情况函数C

upper case function C++

本文关键字:函数 情况      更新时间:2023-10-16

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

这是大写功能的代码段。

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。最终创造不确定的行为。我确定你的意思是:

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放在旁边,您不断地重新分配返回的字符串,字符by carnem;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;
}
  1. 您需要首先设置当地人的大小。它是空的,因此设置其元素将使其崩溃。例如,可以在执行任何操作之前作为localString.resize(originalString.length());做。
  2. 条件应为i<len,最好是Len和我应该是Size_t类型
  3. 请记住,Toupper取决于当前的地方,不要忘记设置在某个地方。
相关文章: