如何使用忽略数字的转换将所有字母转换为大写



我只需要将字符串中的字母转换为大写,并尝试了这段引发错误的代码。

s = "Dense-123-Sparse-999" 
std::transform(s.begin(), s.end(), s.begin(), std::toupper);

预期输出:"DENSE-123-SPARSE-999";

"错误:非void lambda没有在所有控制路径中返回值[-Weror,-Rewesturn-type]";

由于输入字符串中有数字,因此会引发错误。只有当字符是字母表而不是数字时,我才能编写一个将字符转换为大写的lambda函数?

像这样的

transform_if(s.begin(), s.end(), s.begin, [](char c){ if(isalpha(c)return toupper(c);});

由于C++没有transform_if,我正在寻找一个带有任何其他命令的单行

使用Lambda或函数

char upperize(char c)
{
return toupper(c);
}
transform(s.begin(),s.end(),s.begin(),upperize);

transform(s.begin(),s.end(),s.begin(),[](char s){return toupper(s);});
cout<<s;

除了,你还可以使用isalpha

在回答我自己的问题时,用lambda代码计算出了transformfor_each。适用于没有重音的字母。

for_each(s.begin(), s.end(), [](char &c) { c = (isalpha(c))? toupper(c):c; } ) ;

transform(s.begin(), s.end(), s.begin(), [](char &c) { return (isalpha(c))?toupper(c):c ; });

由于Basile的评论教育了我们UTF-8,我的代码在以下情况下失败了:

input: "èéêrię"
output: "èéêRIę" (wrong)

将需要返回并搜索UTF-8库使用

相关内容

  • 没有找到相关文章

最新更新