2015-04-19 1 views
2

У меня есть программа на C, которая в настоящее время читается в китайском тексте и хранит их как type wchar_t. То, что я хочу сделать, - это найти конкретный символ в тексте, но я не уверен, как обращаться к символу в коде.Как обратиться к китайскому символу в коде C

я принципиально хочу сказать:

wchar_t character; 

if (character == 个) { 
    return 1; 
} 

else return 0; 

Некоторые логика была опущена, очевидно. Как я буду заниматься такой логикой на китайском языке в C?

Редактировать: Получил его на работу. Этот код компилируется с -std = c99 и печатает символ «个».

1 #include <locale.h> 
2 #include <stdio.h> 
3 #include <wchar.h> 
4 
5 
6 int main() { 
7   wchar_t test[] = L"\u4E2A"; 
8   setlocale(LC_ALL, ""); 
9   printf("%ls", test); 
10 } 
+0

Каждый символ имеет уникальный код в используемой кодировке, поэтому вам необходимо предоставить этот код, например ascii 'if (character == '3')' и 'if (character == 51)' эквивалентны, потому что ' - десятичный код ascii для символа '' 3''. –

+0

[Редактирование] (http://stackoverflow.com/revisions/29724599/3) уже указывало на ** ** ** ** ** ** ** разницу, которую вы должны применять в псевдокоде. Дополнительно: обратите внимание на согласованность ваших возвращаемых значений. Если 'false' доступен, и вы [с помощью stdbool.h] (http://stackoverflow.com/questions/4767923/c99-boolean-data-type), пометьте свой вопрос [c99] (http: // stackoverflow. com/questions/tagged/c99) ... либо 0/1, либо false/true, микс просто смущает * [(уже очень запутанный)] (http://www.joelonsoftware.com/articles/Unicode.html) * пейзаж юникода дальше ...! – HostileFork

+0

Спасибо, я исправил несоответствие. Это была моя вина быть ленивой на псевдокоде и переходить из C++. Теперь я посмотрю параметры юникода. –

ответ

1

В зависимости от компилятора, если это позволяет источник в поддерживаемой кодировке Unicode, можно просто сравнить с фактическим символом, в противном случае, вы можете использовать широкую символьную константу:

#include <stdio.h> 

int main() 
{ 
    int i; 
    wchar_t chinese[] = L"我不是中国人。"; 
    for(i = 0; chinese[i]; ++i) 
    { 
     if(chinese[i] == L'不') 
      printf("found\n"); 
     if(chinese[i] == L'\u4E0D') 
      printf("also found\n"); 
    } 
} 

Примечания к широкий знак колонка есть L"xxx" в то время как широкий знак L'x'. Кодовая точка Юникода BMP может быть указана с помощью \uXXXX.

FYI, я скомпилирован с Visual Stdio 2012 с кодировками источника UTF-8 с спецификацией, UTF-16 (маленький конец) и UTF-16 (большой конец). UTF-8 без спецификации не работает.

+0

Этот метод работал. Мне пришлось немного изменить его, поскольку я пишу c, а не C++. Мне пришлось добавить флаг компилятора «-std = c99» и использовать «\ uxxxx» вместо «\ uxxxx», но я получил его для работы, спасибо. –

+1

'Немного любопытно, что ответ на C++ принят для вопроса о C. Однако обработка символов (в отличие от функций цикла и ввода/вывода) в обоих случаях одинакова. –

+0

@AlexHansen: Я предлагаю поставить «рабочий код» в редактирование в вопросе. Код в комментариях не читается легко. –

 Смежные вопросы

  • Нет связанных вопросов^_^