将 for_each 与 tolower() 一起使用

发布于 2025-01-06 05:57:49 字数 785 浏览 0 评论 0原文

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

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

I am trying to use the STL function for_each to convert a string into lower case and I have no idea what I am doing wrong. Here's the for_each line in question:

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

Where temp is a string that is holding a string. And here's the function that I wrote for low:

void low(char& x)
{
x = tolower(x);
}

And the compiler error that I keep getting is as such:

error: invalid conversion from void (*)(char&) to char [-fpermissive]

What am I doing wrong?

EDIT:
Here is the whole function that I am writing:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一个人的夜不怕黑 2025-01-13 05:57:49

您想要做的事情的标准习惯用法是

#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);

The standard idiom for what you are trying to do is

#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
失退 2025-01-13 05:57:49

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 )。

for_each's return-value is the function that you passed it — in this case, low. So this:

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

is equivalent to this:

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

when what you really want is probably this:

for_each(temp.begin(), temp.end(), low); // note: modifies temp
clean = temp;

(or you can just eliminate temp to begin with, and use clean throughout).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文