C/C++

Работа со строками, поиск слова

Дан текст. Найти слово встречающееся в каждом предложении или
сообщить что такого слова нет.

Как я понял нужно разбить текст по предложениям. Потом взять любые два предложения и сравнить нет ли там одинаковых слов. Так как искомое слово должно встречаться в каждом предложении, а если такого слова в первой паре нет, то общее слово отсутствует. А если такое слово есть, нужно проверить на наличие этого слова в остальных предложениях. Но с реализацией очень туго.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX_LENGTH_WORD 50 /* максимальная длина слова */
#define MAX_WORDS_IN_SENTENCE 30 /* максимальное количество слов в предложении */
#define MAX_SENTENCES 20 /* максимальное количество предложений */

int main()
{
/* для хранения всего текста используется трехмерный массив символов */
char text[MAX_SENTENCES][MAX_WORDS_IN_SENTENCE][MAX_LENGTH_WORD];
/* количество слов в каждом предложении */
int length[MAX_SENTENCES];
FILE * f;
const char file_name [] = "a.txt"; /* имя файла для загрузки текста */
/* файл состоит из предложений на английском языке. С русским текстом понадобится другая программа */
f = fopen(file_name, "r");
char c;
int i = 0, j = 0, k = 0;
while((c = fgetc(f)) != EOF
&& i < MAX_SENTENCES
&& j < MAX_WORDS_IN_SENTENCE
&& k < MAX_LENGTH_WORD)
{
if( isalpha(c) ) /* латинская буква */
{
text[i][j][k] = tolower(c); /* делаем все буквы маленькими, чтобы легче сравнивать слова */
k++;
}
else if( c == '.' || c == '\?' || c == '!' ) /* конец предложения, если нет сокращений слов */
{
length[i] = j;
i++;
j = 0;
k = 0;
}
else
{
if(k > 0) /* конец слова */
{
j++;
k = 0;
}
}
}
fclose(f);

/* #define test1 */
#ifdef test1 /* чтобы проверить, что загрузилось из файла */
for(int x = 0; x < i; x++)
{
for(int y = 0; y <= length[x]; y++)
{
printf("%s ", text[x][y]);
}
putchar('\n');
}
#endif /* test1 */

/* чтобы найти слово по заданию,
нужно проверить каждое слово первого предложения
с каждым словом всех остальных предожений
*/

int success_code = 0;
for(int x = 0; x <= length[0]; x++)
{
for(int y = 1; y < i; y++)
{
for(int z = 0; z <= length[y]; z++)
{
if (strcmp(text[0][x],text[y][z]) == 0)
{
success_code++;
/* нужно перейти в следующее предложение */
z = 0;
y++;
}
}
}
if(success_code == i - 1)
{
printf("Слово %s встречается во всех предложениях. \n", text[0][x]);
return 0;
}
else
{
success_code = 0;
}
}

printf("Такого слова нет. \n");

return 0;
}
Константин Чернов
Константин Чернов
60 917
Лучший ответ