在改变tolower时出错,帮助会很好

时间:2016-11-18 20:50:02

标签: c++11 stl iterator

我试图转换一个txt文件,所以所有单词都可以是小写的。当我尝试时出现错误我尝试了不同的方法但没有运气,我的代码如下:

              ifstream words("sample_doc.txt"); 
              ofstream samp("sample.txt");
              set <string> lower;
              set <string> to_low;

              copy(istream_iterator<string>(words), istream_iterator<string> (), inserter(lower, begin(lower)) );

              transform(begin(lower), end(lower), inserter(to_low, begin(to_low) ), tolower ); 

当我试图完成时,我收到此错误 &#39; int(int)&#39;:不能从&#39; const std :: basic_string,std :: allocator&gt;&#39;转换参数1到&#39; int&#39;

1 个答案:

答案 0 :(得分:0)

您的问题是int tolower(int ch);intchar作为参数。但是,您传递的是std::string

for(std::string& x: lower)
{
    transform(x.begin(), x.end(), x.begin(), [](unsigned char c) { return std::tolower(c);});
    to_low.insert(x);
}

如果您将最后一行更改为上述循环,它会将std::set<std::string> lower中的每个字符串逐字符转换为小写字符串,并将其插入std::set<std::string> to_low

希望这有帮助!