Каждое слово представляет собой строку, между ними нет пробелов, так как каждое слово читается с помощью scanf.
Если это между словами, просто игнорируйте их.
Например:
"..!Hello!!!."
будет производить
Hello
и
"??Str'ing!!"
будет производить
Str'ing
Поскольку я новичок, мне разрешено использовать только циклы и стандартный заголовок <string.h>
в C.
Я уже сделал вспомогательную функцию, которая продолжает читать каждый индекс и возвращает true, если символ соответствует любому из перечисленных выше.
У меня есть это до сих пор, но оно удаляет знаки препинания из всего кода, а не только из начала и конца слов:
void punc(char *str) {
char *pr = str;
char *pw = str;
while (*pr) {
*pw = *pr++;
pw += (is_punc(*pw) == false);
}
*pw = '\0';
}
memmove
для настройки всей строки или пары указателей (указатель чтения и указатель записи) и просто пропустить запись удаляемых символов). Вы можете использоватьstrspn()
, чтобы перейти к следующему символу в вашем списке удаления, илиstrcspn()
, чтобы перепрыгнуть через символы, не входящие в список. - person David C. Rankin   schedule 20.03.2020abc'-'def
? Пунктуацию убрать или оставить без изменений или как? - person Jonathan Leffler   schedule 20.03.2020abc '-' def
должны исчезнуть, потому что есть пробел до и после последовательности знаков препинания (и оба пробела должны быть оставлены в строке)? Кроме того, вы пропустили?
в заголовке, но показали удаляемый символ — значит, заголовок вопроса неверен? - person Jonathan Leffler   schedule 20.03.2020.
не является частью списка удаления в заголовке вашего вопроса, поэтому этот пример и пример"..!Hello!!!."
не подходят друг другу; вы должны исправить это. - person Armali   schedule 20.03.2020