首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在tolower()中使用for_each

在tolower()中使用for_each
EN

Stack Overflow用户
提问于 2012-02-17 11:05:02
回答 2查看 2.1K关注 0票数 0

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

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

其中temp是包含字符串的字符串。下面是我为low编写的函数:

代码语言:javascript
复制
void low(char& x)
{
x = tolower(x);
}

我一直收到的编译器错误是这样的:

代码语言:javascript
复制
error: invalid conversion from void (*)(char&) to char [-fpermissive]

我做错了什么?

编辑:下面是我正在编写的整个函数:

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 11:18:19

for_each的返回值是您传递给它的函数-在本例中是low

代码语言:javascript
复制
clean = for_each(temp.begin(), temp.end(), low);

等同于:

代码语言:javascript
复制
for_each(temp.begin(), temp.end(), low);
clean = low;

当你真正想要的可能是:

代码语言:javascript
复制
for_each(temp.begin(), temp.end(), low); // note: modifies temp
clean = temp;

(或者您可以从一开始就去掉temp,从头到尾都使用clean )。

票数 2
EN

Stack Overflow用户

发布于 2012-02-17 11:20:09

你正在尝试做的事情的标准成语是

代码语言:javascript
复制
#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9322320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档