Дан текст. Найти слово встречающееся в каждом предложении или
сообщить что такого слова нет.
Как я понял нужно разбить текст по предложениям. Потом взять любые два предложения и сравнить нет ли там одинаковых слов. Так как искомое слово должно встречаться в каждом предложении, а если такого слова в первой паре нет, то общее слово отсутствует. А если такое слово есть, нужно проверить на наличие этого слова в остальных предложениях. Но с реализацией очень туго.
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;
}
#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;
}
Похожие вопросы
- Си. Работа со строками.
- Написать код на языке с++. Определить позицию начала в строке s слова с номером n. помогите пожалуйста
- Годится ли wchar_t для работы со строками UTF-8 в Си?
- Задача по работе со строками на языке программировании c++
- Как реализовать поиск похожей строки в базе данных?
- Нужно сделать метод, в который я могу передать строку, а она должна вернуть мне длину последнего слова в этой строке
- C++\Работа с одномерными массивами: удаление, добавление, перестановка, поиск
- Дана строка, в которой слова разделены или одним пробелом, или запятой и пробелом. C++
- Как найти самое длинное слово в строке C++ ?
- Работа с матрицами. Нужно найти сумму элементов каждой строки. Помогите пожалуйста ????????