Ввести строку и слово, удалить все вхождения слова и вывести строку - C (СИ) (72271)
Формулировка задачи:
Нужно написать программу только со стандартной библиотекой <stdio.h>
Помогите, пожалуйста :3
Решение задачи: «Ввести строку и слово, удалить все вхождения слова и вывести строку»
textual
Листинг программы
#include <stdio.h> //----------------------------------------------------------------------------- int isAlnum(int ch) { return ((('a' <= ch) && (ch <= 'z')) || (('A' <= ch) && (ch <= 'Z')) || (('0' <= ch) && (ch <= '9'))); } //----------------------------------------------------------------------------- int getWord(char* str, char** begin, char** end) { for (; *str && !isAlnum(*str); ++str) { ; } *begin = str; for (; *str && isAlnum(*str); ++str) { ; } *end = str; return (*end - *begin); } //----------------------------------------------------------------------------- void strSet(char* str, char ch, unsigned size) { while (size--) { *str++ = ch; } } //----------------------------------------------------------------------------- int strCmp(const char* str1, const char* str2, int size) { while (size && *str1 && *str2 && (*str1++ == *str2++)) { size--; } return (size == 0); } //----------------------------------------------------------------------------- int strLen(const char* str) { const char* p; for (p = str; *p; ++p) { ; } return (p - str); } //----------------------------------------------------------------------------- char* strChrRemove(char str[], char ch) { int offs = 0; char* p; for (p = str; *p; ++p) { if (*p == ch) { offs++; } else { *(p - offs) = *p; } } *(p - offs) = 0; return str; } //----------------------------------------------------------------------------- char* wordRemove(char text[], const char word[]) { const char REPLACED_CHAR = 1; char* str = text, * begin, * end; int len, lenWord = strLen(word); while ((len = getWord(str, &begin, &end))) { if ((len == lenWord) && strCmp(begin, word, len)) { strSet(begin, REPLACED_CHAR, len); } str = end; } return strChrRemove(text, REPLACED_CHAR); } //----------------------------------------------------------------------------- int main() { char text[] = "this is program delete word 'program'."; char word[] = "program"; printf("%s\n", wordRemove(text, word)); return 0; }
Объяснение кода листинга программы
- Предоставлен код на языке C, который удаляет все вхождения указанного слова из строки.
- Код использует несколько вспомогательных функций:
isAlnum
проверяет, является ли символ буквой или цифрой.getWord
получает подстроку между двумя указанными символами (первым и последним символами слова).strSet
заполняет указанную строку определенным символом.strCmp
сравнивает две строки, игнорируя указанное количество символов с начала.strLen
возвращает длину строки.strChrRemove
удаляет указанный символ из строки, заменяя его на символ заполнения.
- В функции
main
создается тестовая строкаthis is program delete word 'program'.
и словоprogram
. - Вызывается функция
wordRemove
, передавая тестовую строку и слово в качестве аргументов. - Результат выводится на консоль.
- Возвращаемое значение функции
wordRemove
- это измененная версия исходной строки, в которой все вхождения указанного слова заменены на символ заполнения - В данном случае, вывод на консоль будет:
this is delete word 'program'.
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д