上情况函数C
upper case function C++
我的转换字符串到上层案件的问题有问题。我现在有两个功能反向单词和上案。反向当前工作并向后输出信息,但由于某种原因,大写不会。我有一个菜单,允许用户输入一个单词,然后选择反向或将其更改为大写
这是大写功能的代码段。
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;
}
- 您需要首先设置当地人的大小。它是空的,因此设置其元素将使其崩溃。例如,可以在执行任何操作之前作为
localString.resize(originalString.length());
做。 - 条件应为
i<len
,最好是Len和我应该是Size_t类型 - 请记住,Toupper取决于当前的地方,不要忘记设置在某个地方。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 函数中堆分配的效果与缺少堆分配的情况
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 在这种情况下,java对象是否可以调用本机函数
- 这个c++代码是如何在没有定义函数的情况下运行的
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- A类的定义需要B类的定义,如何在不公开B的定义的情况下公开A的公共函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- C++ strcpy 函数在少数主要情况下失败
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何在没有复制构造函数的情况下为地图设置值?
- 构造函数/解构函数情况下的'undefined reference to vtable for'
- c#和c++中虚函数情况下编译器行为的差异.这是我在一次采访中被问到的问题