Я написал этот код, чтобы удалить акценты из символов в строке и сделать прописными:
#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'ö'
,
Эти сравнения должны были генерировать предупреждения, и если нет, то вы должны включить больше предупреждений компилятором, чтобы вы получили предупреждение за это.
Других решений пока нет …