С++ введение: самостоятельное изучение

Мне нужна помощь для моей программы для следующего кода. Я работаю, спасибо "paxdiablo". Результат по-прежнему показывает символ "\". Как я могу это исправить? (не уверен, как ответить "paxdiablo" на sya спасибо.

if (strchr (",.();:-\"&?%$![]^@~`{}_<>/#*_+=", curChar) != NULL)//new change
{
 paragraph.erase(subscript, 1);
 numWords-=1;
}
else 
 subscript+=1;
}
5 ответов

Не эксперт C, но попробуйте выйти из \

if (strchr ("\\,.();:-\"&?%$![]^@~`{}_<>/#*_+=", curChar) != NULL)//new change


Посмотрите, как строка, с которой вы сопоставляете, имеет \" в ней?

Это escape-последовательность. Он сообщает компилятору С++: "Я хочу, чтобы символ " находился в этом строчном литерале". Вы должны сказать это особым образом, потому что обычно " обозначает конец строки.

Символ \ является особенным, так как он запускает все эти escape-последовательности. Поэтому, если вы хотите, чтобы он отображался в строке, вам тоже нужно использовать escape-последовательность. В противном случае компилятор считает, что вы запускаете еще одну escape-последовательность.

Эквивалентная последовательность для \, как ни странно, \\.


\ является escape-символом (он ускользает от "). Добавьте \\ в строку символов и он должен работать.

if (strchr (",.();:-\"&?%$![]^@~`{}_<>/#*_+=\\", curChar) != NULL)


Попробуйте выполнить его: \\ вместо \


Если вы хотите удалить '\', вы хотите сделать это:

if (strchr (",.();:-\\\"&?%$![]^@~`{}_<>/#*_+=", curChar) != NULL)

Причина, по которой исходная строка имела \", которая действительно ускользает от ". Чтобы добавить фактический \, вам нужно сделать \\, чтобы избежать его.

licensed under cc by-sa 3.0 with attribution.