将for_each与tolower()一起使用
Using for_each with tolower()
我正在尝试使用STL函数for_each将字符串转换为小写,但我不知道我做错了什么。以下是有问题的每行(_E):
clean = for_each(temp.begin(), temp.end(), low);
其中temp是一个包含字符串的字符串。下面是我为low编写的函数:
void low(char& x)
{
x = tolower(x);
}
我不断得到的编译器错误是这样的:
error: invalid conversion from void (*)(char&) to char [-fpermissive]
我做错了什么?
编辑:以下是我正在编写的整个函数:
void clean_entry (const string& orig, string& clean)
{
string temp;
int beginit, endit;
beginit = find_if(orig.begin(), orig.end(), alnum) - orig.begin();
endit = find_if(orig.begin()+beginit, orig.end(), notalnum) - orig.begin();
temp = orig.substr(beginit, endit - beginit);
clean = for_each(temp.begin(), temp.end(), low);
}
您尝试做的事情的标准习惯用法是
#include <algorithm>
#include <string>
std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
for_each
的返回值是您传递的函数—在这种情况下为CCD_。所以这个:
clean = for_each(temp.begin(), temp.end(), low);
相当于:
for_each(temp.begin(), temp.end(), low);
clean = low;
当你真正想要的可能是:
for_each(temp.begin(), temp.end(), low); // note: modifies temp
clean = temp;
(或者您可以从一开始就去掉temp
,并在整个过程中使用clean
)。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 将for_each与tolower()一起使用
- :: 与 tolower() 一起使用所必需的运算符