任何读入并在同一步骤中小写的方法
any way to read in and make lower case in same step?
我正在通过以下方式读取用户输入
string word;
while(cin >> myWord)
//put myWord in array
但为了排序,我希望"这个"和"这个"是相同的。对于我的排序算法,我使用默认的<和字符串的>值,所以 This != 这个,为了我的目的,我需要它 ==,所以我想在读入时立即将所有内容设为小写。从下半部分我看到我需要创建一个for
循环来遍历单词并使其小写,因此我需要在将单词放入数组之前在 while 循环中执行此操作。但是我想知道我是否可以做任何技巧,将 cin 中的单词放入已经小写myWord
(或在读入后立即将"myWord"小写)放在一行中,沿着cin >> myWord.lower
的思路和字符串的>
std::for_each(myWord.begin(),myWord.end(),[] (char &c) {c=std::tolower(c);});
这就是我的做法,通过使用自定义排序谓词来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:还有更复杂的方法,例如使用自定义字符特征,但这确实如此,而且很容易理解。如果你真的很好奇,可以看看这里:
https://stackoverflow.com/a/5319855/3093378
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 维护unordered_map但同时每一步都需要最低的映射值
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 如何在最后一步使用CryptDecrypt解决NTE_BAD_DATA
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 如何在 C++ 中返回到上一步
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 使用 C++20 概念强制类实现一组方法
- 类中一种方法的部分专用化
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 有没有一种方法可以忽略Qt c++中的文件名大小写敏感性?
- 有没有一种方法可以使用图形在C++中逐个字母地打印控制台中的文本
- 有没有一种方法可以将数据从javascript发送到exe文件