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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lara1
1 / 1 / 0
Регистрация: 15.10.2011
Сообщений: 20
#1

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

09.10.2013, 10:38. Просмотров 585. Ответов 4
Метки нет (Все метки)

Дан файл, содержащий текст на русском языке. Найти слова, встречающиеся в каждом предложении текста или сообщить, что таких слов нету.

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

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

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

вот код: Весь текст записано в строке 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 минуты
Неужели никто не знает? Помогите пожалуйста, очень нужно, программа то ведь почти готова и и где ошибка есть, я тоже нашла... просто не знаю как исправить(((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 10:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) (C++):

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

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

Определить в каждом предложении текста колличество символов, отличных от букв и пробела - C++
Помогите пожалуйста решить задачу!!! С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000...

В предложении S1 найти все слова, которые есть в предложении S2 - C++
Здравствуйте. Не как не могу доделать программу. #include &lt;iostream&gt; #include &lt;string.h&gt; using std::cout; using std::cin; int...

Найти слово встречающееся в каждом предложении - C++
что то программа не получается,в чём ошибка? помогите пожалуйста разобраться,вот сама задача: /&quot;дана строка,содержащая текст.Найти слово...

Файлы. Найти слово, встречающееся в каждом предложении - C++
Уже сломал голову с ней, решил кучу других задач. Но эта... вынос мозга.:wall: :wall: :wall: Попытки запихнуть в векторы , массивы - крах....

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

Найти слова, встречающиеся и в вопросительных, и в восклицательных предложениях, но не в повествовательных - C++
Условие: дан текст, состоящий из предложений, разделённых знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов,...

Найти все формы слов, встречающиеся только у одного слова - C++
работа со строками и массивами Дан файл, содержащий список всех форм слов русского языка. В одной строчке записана одна форма слова....

В предложении найти все однокоренные слова - C++
В предложении найти все однокоренные слова. Корень задается с клавиатуры. Подскажите с чего начать) пишется в Visual Studio 2008

Строки. В предложении найти все слова - C++
В предложении найти все слова, отличные от последнего. В каждом найденном слове удалить первую букву. Результат вывести на печать. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru