简体   繁体   English

如何使用for_each,transform,iterators和lambda的某种组合将字符串std :: set转换为小写c ++?

[英]How to convert a std::set of strings to lowercase c++ using some combination of for_each, transform, iterators and lambda?

I'm trying to convert a set of strings to lowercase without using low level loops like while and for(;;) because I'm practicing using the STL. 我正在尝试将一组字符串转换为小写而不使用while和for(;;)之类的低级循环,因为我正在练习使用STL。 I was thinking about using for_each and transform and lambda but I'm not really sure how they work. 我当时正在考虑使用for_each以及transform和lambda,但我不确定该如何工作。

#include <string>
#include <iterator>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
    set<string> words;
    //insert a bunch of words using words.insert().....
    //convert everything in words to lower case
    return 0;
}

How would I convert each string in the set words using any combination of for_each, transform, iterators and lambdas? 如何使用for_each,transform,iterators和lambdas的任意组合转换设置words中的每个字符串?

I was thinking of doing something like: transform(words.begin(), words.end(), words.begin(), ??lambda??) however I don't know how to do the 4th parameter 我正在考虑做类似的事情: transform(words.begin(), words.end(), words.begin(), ??lambda??)但是我不知道该怎么做第四个参数

You can't do something like transform(words.begin(), words.end(), words.begin(), ??lambda??), because words.begin() would be a const iterator. 您不能做诸如transform(words.begin(),words.end(),words.begin()和?? lambda ??)之类的操作,因为words.begin()将是一个常量迭代器。

You'll have to do something like this: 您将必须执行以下操作:

set<string> words;
set<string> new_words;
transform(words.begin(), words.end(), std::inserter(new_words, new_words.begin()), [](string s) {
        transform(s.begin(), s.end(), s.begin(), ::tolower); 
        return s;
    });
return new_words;

try 尝试

     std::for_each(words.begin(),words.end(),[](char & c) { c = tolower(c); });

and include cctype. 并包含cctype。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM