Похоже, что ваше условие завершения for-loop
установлено неудовлетворительным с учетом вашего ввода.
if (s[i] == space && s[i + 1] != space) { //for more than one word in the text
for (j = i + 1; s[j] != space; j++)
if (s[j] != 'p' && s[j + 1] != space)
wordfound = true;
}
Здесь вы проверяете начальный пробел во входной строке. Если вы найдете его, то увеличиваете проверку индекса, пока не достигнете другого места. Что если в вашей строке нет пробела?
Вместо этого попробуйте установить второе условие для пустых и пробелов для завершения цикла:
if (s[i] == space && s[i + 1] != space) { //for more than one word in the text
for (j = i + 1; s[j] != '\0' && [j] != space; j++)
if (s[j] != 'p' && s[j + 1] != space)
wordfound = true;
}
И тогда вы установите:
wordfound = false;
i = j;
i++;
} //end while loop
Это продолжит переустанавливать ваш цикл, я не совсем понимаю ваши аргументы в пользу этого, но это будет запускать ваш цикл бесконечно.
Если вы сделаете эти изменения, ваш код завершится:
#include<stdio.h>
#include<stdbool.h>
#define space ' '
void find_word(char s[]) {
bool wordfound = false;
int i, j = 0, word = 0;
i = 0;
while (s[i]) { //s[i]!='\0' does not
if (s[i] != 'p' && s[i + 1] != space) { //for the first word
wordfound = true;
word++;
}
wordfound = false;
if (s[i] == space && s[i + 1] != space) { //for more than one word in the text
for (j = i + 1; s[j] && s[j] != space; j++)
if (s[j] != 'p' && s[j + 1] != space)
wordfound = true;
}
if (wordfound) {
word++;
}
wordfound = false;
i++;
} //end while loop
printf("Number of words not contain p character%d\n\n", word);
}
int main(void) {
char s[] = {"pppp zzzz ppp ssss dfg sfsfdsf"};
find_word(s);
return 0;
}
Выход:
Number of words not contain p character24