从字符中删除重音符号

时间:2012-12-01 15:28:05

标签: 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;
}

它使普通字符为大写,但忽略重音字符并用重音以小写形式打印。提前谢谢!

1 个答案:

答案 0 :(得分:2)

这很可能是因为input是一个宽字符串,但'ö'之类的字符文字不是宽字符,这意味着比较将失败。使用例如L'ö'

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