Не могу поймать апостроф в заявлении if

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

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

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

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

                }

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

Благодарю.

2 ответа

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

else if (ch == '\'' || ch == '’' || ch == '‘')
{
    [do stuff]
}

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


else if (ch == L'\'' || ch == L'’' || ch == L'‘')
{
    [do stuff]
}

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

Другие вопросы по тегам