Поиск слов строки, начинающихся на указанную букву - C (СИ)
Формулировка задачи:
Всем привет, нашел код программы в инете который в введенной строке ищет и выводит слова которые начинаются на указанную букву, помоги пожалуйста переделать код что бы выводить слова которые в себе имеют указанную букву, не важно или первая или 3-4 и тд.
И еще нужно в конце убрать вывод цикла memory error, а то когда его убираю то программа не работает.
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> /* указатель на следующее слово в строке, или 0, если слова кончились */ char *nextWord(char *str){ char *p; for ( p = str; *p != '\0' && *p!=' '; p++ ) ; if ( *p == '\0' ) return NULL; while ( *p==' ') p++; return ( *p == '\0' ) ? NULL : p; } /* * возвращает одно слово из строки str в буфере wrd. динна wrd = len - 1 * в случае неудачи вернёт NULL */ char *getWord(const char *str, char *wrd, unsigned int len){ char *p; char *w; for ( p = (char *)str, w = wrd; *p != '\0' && *p!=' ' ; p++, w++ ) *w = *p; *w = '\0'; return wrd; } /* Найти в строке все слова, начинающиеся на заданную букву. Найденные слова вывести в алфавитном порядке. Если нужных слов нет, то выдать сообщение. */ int main(){ char buf[500]; char wrd[500]; char **wrds, *pBuf; unsigned int count, len, i; char c; printf("Enter some string: "); gets(buf); printf("Enter some symbol: "); scanf("%c", &c); /* проход по строке, создание массива слов */ for ( pBuf = buf, count = 0, wrds = NULL; pBuf != NULL; pBuf = nextWord(pBuf) ){ if ( *pBuf == c ){ getWord(pBuf, wrd, 500); count++; if ( count == 1 ){ if ( (wrds = (char**)malloc(sizeof(char*))) == NULL ){ printf("Memory error!\n"); exit(1); } } else{ if ( (wrds = (char**)realloc(wrds, count * sizeof(char*))) == NULL ){ printf("Memory error!\n"); exit(1); } } len = strlen(wrd); if ( (wrds[count - 1] = (char*)malloc(len + 1)) == NULL ){ printf("Memory error!\n"); exit(1); } strcpy(wrds[count - 1], wrd); } } if ( !count ){ printf("No words starting with '%c' found in string \"%s\"\n", c, buf); } /* и вывод */ for ( i = 0; i < count; i++ ) printf("%s\n", wrds[i]); getchar(); getchar(); }
Решение задачи: «Поиск слов строки, начинающихся на указанную букву»
textual
Листинг программы
int search_char(const char *s, int ch) { while (*s) { if (*s == ch) return 1; s++; } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д