c++ - 从字符中删除重音

标签 c++ diacritics wstring

我写了这段代码来删除字符串中字符的重音符号并变成大写:

#include <iostream>
#include <string>
using namespace std;
std::wstring input;
int main()
{
   input.reserve(255);
   cout << "Enter string to be converted:" <<endl;
   getline(std::wcin,input);
   for (unsigned int iii=0;iii<input.length();iii++)
    {
      if(input[iii]== L'ő') input[iii]=L'o';
      if(input[iii]== L'ö') input[iii]=L'o';
      if(input[iii]== L'ó') input[iii]=L'o';
      if(input[iii]== L'ü') input[iii]=L'u';
      if(input[iii]== L'ú') input[iii]=L'u';
      if(input[iii]== L'ű') input[iii]=L'u';
      if(input[iii]== L'é') input[iii]=L'e';
      if(input[iii]== L'á') input[iii]=L'a';
      if(input[iii]== L'í') input[iii]=L'i';
      input[iii]=towupper(input[iii]);
    }
 std::wcout<<input;
 return 0;
}

它使普通字符大写,但忽略重音字符并以小写形式打印它们并带有重音符号。提前致谢!

最佳答案

这很可能是因为input是一个宽字符的字符串,但是像'ö'这样的字符字面量不是宽字符,这意味着比较会失败。使用例如L'ö'

那些比较应该会产生警告,如果没有,那么您应该通过编译器打开更多警告,以便您收到警告。

关于c++ - 从字符中删除重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660844/

相关文章:

c++ - 只要集合不变,迭代器是否以相同的顺序迭代 boost::unordered_set 或 boost::unordered_map?

c++ - 如何使一个函数同时适用于字符串和 wstring?

python - UT8 问题 - 有没有办法在 Python 中将看起来奇怪的字符 à 转换为正确的德语字符 ä ?

java - Android 如何将带有重音符号的文本发送到 PHP

string - 组合变音符号出现在代码点之后的顺序是否重要?

c++ - Windows 中的 Exe 在调用 GetWindowsDirectory 时 append wstring 时崩溃

c++ - 如何使用字符串的值将字符串转换为 wstring?

c++ - LLVM:如何交叉编译 C++ 程序

C++ 将对象传递给函数

c++ - 在堆上分配指针数组