【发布时间】:2020-12-10 07:23:11
【问题描述】:
我只需要将字符串中的字母转换为大写,并尝试了这段引发错误的代码。
s = "Dense-123-Sparse-999"
std::transform(s.begin(), s.end(), s.begin(), std::toupper);
预期输出:“DENSE-123-SPARSE-999”
“错误:非void lambda没有在所有控制路径中返回值[-Werror,-Wreturn-type]”
由于输入字符串中有数字,因此引发错误。如何编写一个仅当字符是字母而不是数字时才将字符转换为大写的 lambda 函数?
类似的,
transform_if(s.begin(), s.end(), s.begin, [](char c){ if(isalpha(c)return toupper(c);});
由于 C++ 没有 transform_if,我正在寻找带有任何其他命令的 one liner。
【问题讨论】:
-
请注意,与 2020 年相比,我们拥有 UTF-8 everywhere,因此请考虑使用 Qt 或 POCO 之类的库。您将如何处理一些
é或à或€或°或§标志?所有这些都在我的AZERTY 键盘上... -
不过请阅读一些good C++ programming book,并查看this C++ reference
标签: c++ string lambda transform toupper