Я создаю крошечную программу угадывания столиц стран. В некоторых столицах есть акценты, cedillas и т. Д.C - Как избежать диакритических/акцентов чувствительных вопросов
Поскольку мне нужно сравнить капитал и текст, которые пользователь угадал, и я не хочу акцента испортить сравнение, я пошел копать в интернете для некоторых способ выполнения этого.
я наткнулся на бесчисленных решений на другие языки программирования, однако лишь пару результатов о С.
Ни один из них на самом деле работал со мной. Хотя, я пришел к выводу, что мне придется использовать библиотеку wchar.h для работы с этими раздражающими символами.
Я сделал этот крошечный бит кода (который заменяет É на E), чтобы проверить этот метод и против всех Я читаю и понимаю, что это не сработает, даже при печати широкой строки символов не отображаются диакритические символы. Если это сработает, я уверен, что смогу реализовать это в программе капиталов, поэтому я буду признателен, если кто-нибудь скажет мне, что случилось.
#include<stdio.h>
#include<locale.h>
#include<wchar.h>
const wchar_t CAPITAL_ACCUTE_E = L'\u00C9';
int main()
{
wchar_t wbuff[128];
setlocale(LC_ALL,"");
fputws(L"Say something: ", stdout);
fgetws(wbuff, 128, stdin);
int n;
int len = wcslen(wbuff);
for(n=0;n<len;n++)
if(wbuff[n] == CAPITAL_ACCUTE_E)
wbuff[n] = L'E';
wprintf(L"%ls\n", wbuff);
return 0;
}
Это проблематичный вопрос в стандарте C. Сначала уточните, какой входной код использует ваша платформа, а затем предпримите соответствующие меры. – Olaf
Как сказал @Olaf: вам нужно знать входную кодировку. Ваш пример хорошо работает с 'LANG = en_US.UTF-8' в bash (I C & P ваша строка", который заменяет É на E "для ввода). Вы уже используете 'setlocale (3)', просто прочитайте вывод и действуйте соответственно (самая сложная часть, если вы спросите меня). – deamentiaemundi
С 'char', я использовал' tolower (toupper (ch)) ', чтобы складывать и складывать снова буквы, похожие на«. Возможно, эквивалент 'wchar_t'? Может быть, 'towctrans()'? – chux