Не удается поймать апостроф в операторе if

Я создаю программу, которая принимает текстовый файл и слово. Он читает текстовый файл и сравнивает слово с текущим читаемым словом. То, как я построил это, заключалось в том, чтобы игнорировать «s». Например, если я ищу «НАСА» и натыкаюсь на слово «НАСА», оно будет просто читаться как «НАСА». К сожалению, я не могу поймать апостроф, используя «if (ch == ''\')», «ch» — текущий символ. Я думаю, может быть, потому что апострофы в текстовом файле выглядят так». Я не знаю, как приспособиться к этому.

Вот что я должен поймать апостроф:

else if (ch == '\'')
                {

#if 1           
                    printf("Comparing Apostrophe\n");
#endif
                    continue;

                }

Обратите внимание, что это часть большой программы, которую мне не разрешено вам показывать. Это объясняет «иначе, если» в начале.

Спасибо.


person IC2D    schedule 07.10.2013    source источник
comment
Чтобы проверить, какие апострофы у вас есть в тексте, вы можете скопировать часть NASA в новый текстовый файл и написать небольшую программу, которая покажет вам ASCII-коды каждой буквы.   -  person PiotrK    schedule 07.10.2013
comment
@PiotrK Зачем писать программу для этого? Просто используйте обычный шестнадцатеричный редактор. Я фанат HxD, но подойдет любой шестнадцатеричный редактор.   -  person neminem    schedule 07.10.2013


Ответы (3)


Если ваши апострофы выглядят как ''', вам следует просто проверить наличие символа ''', он не сделает этого за вас. Это другой символ - выглядит как расширенный символ ASCII 146 (десятичный), "правая одинарная кавычка". Текст, вероятно, пришел из MS Office — он любит преобразовывать одинарные и двойные кавычки в одинарные и двойные, так называемые «умные» кавычки (которые, если вы делаете что-либо с текстом вне Office, совсем не так). как было указано, «левая одинарная кавычка», символ ascii 145, является другой половиной того же набора, поэтому некоторые из них могут быть и в вашем тексте. То есть:

else if (ch == '\'' || ch == '’' || ch == '‘')
{
    [do stuff]
}
person neminem    schedule 07.10.2013
comment
+1. Я бы также проверил наличие левой одинарной кавычки (десятичное число 145) только потому, что иногда они используются (соответствующим образом). - person lurker; 07.10.2013

Для широкого символа wchar_t добавьте L


else if (ch == L'\'' || ch == L'’' || ch == L'‘')
{
    [do stuff]
}
person Thierry Cosson    schedule 05.01.2019

Вместо использования escape-символа вы можете использовать число ascii для апострофа, равное 39: else if (ch == 39)

person Igor Popov    schedule 07.10.2013
comment
Это не должно быть необходимо. '\'' - правильный синтаксис. - person lurker; 07.10.2013