Форум программистов, компьютерный форум CyberForum.ru

Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) - C++

Восстановить пароль Регистрация
 
Lara1
1 / 1 / 0
Регистрация: 15.10.2011
Сообщений: 20
09.10.2013, 10:38     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) #1
Дан файл, содержащий текст на русском языке. Найти слова, встречающиеся в каждом предложении текста или сообщить, что таких слов нету.

Нашла программу (почти доделанную), немного переделала ( считывание из файла и запись в файл), Но ошибку исправить не могу.

В общем если в файле написано:
"мама мыла раму. окна мама тоже моет. мама устала", То слово "мама" программа находит.

НО! если написано: "мыла раму мама. окна мама тоже моет. мама устала" то уже нет.
То есть после первого слова, поиск второго не осуществляет(((

вот код: Весь текст записано в строке S
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 int n = -1;                         // общее количество предложений в строке
    char *p = strtok(s, ".");           // разделитель между лексемой "точка", т е высекаем предложения
    if(p)                               // чтобы убедиться, что во входном тексте имеется хотя бы ОДНО предложение
    {
        n++;
        strcpy(a[n], p);
    }
    do
    {
        p = strtok(NULL, ".");
        if(p)
        {
            n++;
            strcpy(a[n], p);
        }
    }
    while(p);
    //  Разобъем ПЕРВОЕ предложение на слова и проверим
    // каждое слово с каждым словом в других предложениях. Если текущее слово не встретиться в остальных 
   //предложениях, значит оно  не подходит и переходим к следующему слову
    p = strtok(a[0], " ");                  // указываем, что разделитель между словами ПРОБЕЛ (a[0] - первое предложение во входном тексте)
    bool b, glob;                           // будет равна
    char tmp[LEN], tmp1[LEN];
    char *p1;
    bool yn = false;
    if(p)
        strcpy(tmp, p);
    while(p)
    {
        // пробегаем по всему массиву предложений кроме первого
        for(int i = 1; i <= n; i++)
        {      
            glob = true;
            b = false;           // предположим что текущего слова из ПЕРВОГО предложения НЕТ в остальных предложениях
            char d[LEN];
            strcpy(d, a[i]);  //ВОТ ТУТ ГДЕ ТО ОШИБКА ПО МОЕМУ ПРЕДПОЛОЖЕНИЮ
            p1 = strtok(d, " "); 
            if(p1)
            {
                strcpy(tmp1, p1);
                if(strcmp(tmp, tmp1) == 0)
                    b = true;
            }
            while(p1)
            {
                p1 = strtok(NULL, " ");
                if(p1)
                {
                    strcpy(tmp1, p1);
                    if(strcmp(tmp1, tmp) == 0)
                        b = true;
                }
            }
            if(b == false)
            {
                glob = false;
                break;              // нет смысла проверять в других предложениях, т к в i - ом анализируемого слова не обнаружено
            }
        }
        if(glob)
        {
            cout << tmp << "\t";
            yn = true;
            //cout << "\n\nSlovo '" << tmp << "' vstrechaetsya v kazdom predlozenii!";
        }
        p = strtok(NULL, " ");
        if(p)
            strcpy(tmp, p);
    }
    if(!yn)
        cout << "\n\nSlova vstreshusegosya vo vseh predlozeniyh NE obnaruzeno";
 
    if(p != NULL)
        delete []p;
Возможно можно использовать спец функции, но я не знаю какие и как ими пользоваться. Исходник текста взяла отсюда, но видимо он тоже неправильный((
Если кто знает, как реализовать, то буду очень благодарна.

Добавлено через 13 часов 53 минуты
Неужели никто не знает? Помогите пожалуйста, очень нужно, программа то ведь почти готова и и где ошибка есть, я тоже нашла... просто не знаю как исправить(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 10:38     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять)
Посмотрите здесь:

C++ Работа с двумерным массивом. вывести все слова, встречающиеся более одного раза.
Найти слово встречающееся в каждом предложении C++
C++ В предложении найти все однокоренные слова
C++ Файлы. Найти слово, встречающееся в каждом предложении
Строки. В предложении найти все слова C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
09.10.2013, 11:59     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) #2
Судя во всему что я понял, вам нужно каждое слово в каждом предложении занести в массив.
Второе, надо сравнить взятый отдельный элемент массива, с элементами другого массива на предмет совпадения. У вас такой проверки нету.
Lara1
1 / 1 / 0
Регистрация: 15.10.2011
Сообщений: 20
09.10.2013, 12:09  [ТС]     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) #3
Проверка то есть, просто работает косячно(( Я думаю что можно сделать проще, с помощью специальных функций из stl, но я их не знаю, увы(((( По сути программа то не сложная, просто я с++ и его функции не знаю((
vitecd
18 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 59
09.10.2013, 12:13     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) #4
дак это и не С++, это С
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
09.10.2013, 12:59     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) #5
Цитата Сообщение от Lara1 Посмотреть сообщение
Проверка то есть, просто работает косячно(( Я думаю что можно сделать проще, с помощью специальных функций из stl, но я их не знаю, увы(((( По сути программа то не сложная, просто я с++ и его функции не знаю((
Там проверка совсем не та, что нужна, проверяет она 1 элемент массива предложения 1, с предложение 2, и вся проверка на этом заканчивается. 3-е предложение даже в проверке не участвует если во втором не чего не найдено.
Yandex
Объявления
09.10.2013, 12:59     Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять)
Ответ Создать тему
Опции темы

Текущее время: 09:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru