Поиск слов строки, начинающихся на указанную букву - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы