2014-09-16 3 views
0

Я получил некоторую помощь о том, как увидеть, содержит ли «строка» в C определенный символ. Короче говоря:Проверка специальных символов в C

if(*s=='x') { //Where x is some character 
    //Do something 
} 

Теперь, насколько я могу видеть, что это работает для букв английского алфавита (A-Z, A-Z).

Однако, как я могу проверить, если текущий символ равен специальный символ (например, æ, ø или å)?

+1

Вы знаете, какую кодировку вы используете для ваших строк? Это будет работать для однобайтовых кодировок (например, Latin1, Windows-1252 или MacRoman) и (при условии, что '* s' имеет правильный тип) для строк' wchar' или 'tchar' Unicde, но не для многобайтовых переменных длины таких как UTF8. – usr2564301

ответ

1

Просто сравните с ASCII-код символа:

if(*s==10) { //Where 10 is the ASCII code of the special character 
    //Do something 
} 

Вы можете найти ASCII код здесь: http://www.asciitable.com/

+0

Я не думаю, что «ASCII» - это то, что ищет OP, поскольку он уже покрывает это. – usr2564301

+0

Характер, такой как 'æ, ø, å', не является кодами ASCII. [Американский стандартный код для обмена информацией] (http://en.wikipedia.org/wiki/ASCII) – chux

+0

Уверены, что они æ = 145, ø = 237, å = 134 Они расширенные коды ASCII – kipodi

1

Сравните характер фактического значения (до тех пор, пока значение между 0 и 255).

Для получения подробной информации посетите страницу æ wiki. Так

если (* с == 0xE6)

для нижнего кожуха

если (* с == 0xc6)

для верхнего корпуса

1

В большинстве случаев вы должны использовать функцию для этого: strchr для поиска fo r один байт, или strstr для поиска более одного байта.

Кроме того, в общем случае C не знает о персонажах, он знает только о байтах. Особым символом может быть один байт - æ в iso8859-1 кодирование - \xe6, например, или может быть более одного байта: тот же символ в кодировке utf-8 является 2-байтовой последовательностью \xc3\xa6.

Для поиска UTF-8 закодированной строки для æ можно использовать

strstr(s, "\xc3\xa6") 
Смежные вопросы