0

我正在尝试使用 STL 函数 for_each 将字符串转换为小写,但我不知道我做错了什么。这是有问题的 for_each 行:

clean = for_each(temp.begin(), temp.end(), low);

其中 temp 是一个包含字符串的字符串。这是我为低写的函数:

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

2 回答 2

6

您尝试做的标准成语是

#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
于 2012-02-17T03:20:09.393 回答
2

for_each的返回值是您传递给它的函数——在这种情况下,low. 所以这:

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在整个过程中使用)。

于 2012-02-17T03:18:18.503 回答