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