Ввести строку и слово, удалить все вхождения слова и вывести строку - 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'.
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д