ToLower std :: vector <std :: string>

Mat*_*ios 1 c++ string vector tolower

这与问题有关:

字符串数组到C++函数

尽管一切都在现在的工作很好,我没能做到的唯一事情是tolower的,因为我得到一个错误的用户输入:

功能

bool lookupTerm(const std::string& term, const std::vector<std::string>& possible_names) {

    transform(term.begin(), term.end(), term.begin(), ::tolower);
    for (const std::string &possible_name : possible_names)
    {
        if (possible_name.compare(term) == 0)
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

参数

const std::vector<std::string> possible_asterisk         = { "star" , 
                                                              "asterisk" , 
                                                              "tilde"};
string term = "SoMeWorD";
Run Code Online (Sandbox Code Playgroud)

错误

 In file included from /usr/include/c++/7.2.0/algorithm:62:0,
                 from jdoodle.cpp:5:
/usr/include/c++/7.2.0/bits/stl_algo.h: In instantiation of '_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; _OIter = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; _UnaryOperation = int (*)(int) throw ()]':
jdoodle.cpp:40:64:   required from here
/usr/include/c++/7.2.0/bits/stl_algo.h:4306:12: error: assignment of read-only location '__result.__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >::operator*()'
  *__result = __unary_op(*__first);
Run Code Online (Sandbox Code Playgroud)

我知道转换应该接收一个字符串.我如何暂时将std :: vector转换为简单的字符串,以便我可以将该单词转换为小写?

das*_*ght 7

这是因为termconst参考.在将其转换为小写之前制作副本:

bool lookupTerm(const std::string& term, const std::vector<std::string>& possible_names) {
    std::string lower(term);
    transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
    for (const std::string &possible_name : possible_names)
    {
        if (possible_name.compare(lower) == 0)
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过删除const并按值获取参数来实现相同的效果:

bool lookupTerm(std::string term, const std::vector<std::string>& possible_names) {
Run Code Online (Sandbox Code Playgroud)