Не могу поймать апостроф в заявлении 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)