0

我正在通过阅读用户输入

string word;
while(cin >> myWord)
    //put myWord in array

但为了排序,我希望“这个”和“这个”是一样的。对于我的排序算法,我使用字符串的默认 < 和 > 值,所以 This != this ,出于我的目的,我需要它 == 所以我想在读入时立即将所有内容变为小写。我看到我需要创建一个for循环来遍历 word 并将其设为小写,因此我需要在 while 循环中执行此操作,然后再将 word 放入数组中。但我想知道是否有什么技巧可以让 cin 中的单词变成myWord已经小写的单词(或者在读入后立即将“myWord”变成小写)在一行中,cin >> myWord.lower就像我是谈论

4

2 回答 2

0

我就是这样做的,通过使用自定义排序谓词std::string

#include <algorithm>
#include <iostream>
#include <locale>
#include <string>

struct SortNoCase // functor used to sort strings ignoring the case
{
    bool operator()(const std::string& lhs, const std::string& rhs) const
    {
        std::string lhs_lower, rhs_lower;
        std::transform(std::begin(lhs), std::end(lhs), 
            std::back_inserter(lhs_lower), ::tolower);
        std::transform(std::begin(rhs), std::end(rhs), 
            std::back_inserter(rhs_lower), ::tolower);
        return lhs_lower < rhs_lower;
    }
};


int main ()
{
    std::vector<std::string> vs{"Some", "strings", "THAT", "are", "UnSorted"};

    std::sort(std::begin(vs), std::end(vs), SortNoCase());

    for(auto&& elem: vs)
        std::cout << elem << " ";
    std::cout << std::endl;
}

PS:还有更复杂的方法,比如使用自定义 char 特征,但是这样做并且很容易理解。如果你真的是古玩,可以看这里:

https://stackoverflow.com/a/5319855/3093378

于 2014-11-21T23:37:46.987 回答
0
std::for_each(myWord.begin(),myWord.end(),[] (char &c) {c=std::tolower(c);}); 
于 2014-11-21T23:44:18.960 回答