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

Найти слова с онк и енк в тексте - C++

Восстановить пароль Регистрация
 
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
19.05.2013, 08:09     Найти слова с онк и енк в тексте #1
Здравствуйте, решаю лаб. работу по программированию. Задание: в произвольном тексте (взятом и файла) (10 строк, не более 80 символов в строке) найти слова содержащие последовательность символов ОНК или ЕНК. Записать в другой файл (имя файла задается пользователем) все эти слова и количество повторений каждого слова в тексте.

Подготовленный для тестирования текст:
123
sssdf
авав
слово с онк: ручонка собачонка
стово с енк: избенка сестренка
Мой вариант решения:

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
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
 
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"rus");
    char a[50],b[50],c[800],w[20][15],s[15];
    int i,j,n,k,r,t,f[20]={0},q=0;
    bool x;
    FILE *f1, *f2;
    cout<<"откуда брать текст:\n";
    gets(a);
    cout<<"куда сохранить результат:\n";
    gets(b);
    f1 = fopen(a,"rt");
    f2 = fopen(b,"wt");
    for (i=0;!(feof(f1));i++)
        c[i]=fgetc(f1);
    cout<<"Текст из файла:\n";
    for (j=0;j<i-1;j++)
        cout<<c[j];
    cout<<"\nслова с онк или енк:\n";
    //ищем онк и енк
    for (j=0;j<i-1;j++)
        if (((c[j]=='о')&&(c[j+1]=='н')&&(c[j+2]=='к'))||((c[j]=='е')&&(c[j+1]=='н')&&(c[j+2]=='к')))
        {
            //если нашли - ищем начало и конец слова
            n=j;
            while ((c[n-1]!=' ')&&(c[n-1]!='\n'))
            {
                n--;//начало
            }
            k=j;
            while ((c[k+1]!=' ')&&(c[k+1]!='\n'))
            {
                k++;//конец
            }
            for (r=0;r<15;r++)
                s[r]=0;//обнуление массива слова
            for (r=0;r<k-n;r++)
                s[r]=c[n+r];//сохранение слова в массив s
            x=0;//x-индикатор нового слова =1 если слово уже встречалось =0 если слово новое
            for (t=0;t<20;t++)//проверка встретили слово в первый раз или уже видели
                if (w[t]==s)
                {
                    f[t]++;//если видели - +1 счетчику
                    x=1;
                }
            if (x==0)//если не видели
            {
                for (r=0;r<15;r++)
                    w[q][r]=s[r]; //сохраняем слово в массив w
                f[q]++;
                q++;
            }
        }
 
    for (r=0;r<q;r++)
    {
        printf("слово\t%s\t%d раз\n",w[r],f[r]);
        fprintf(f2,"слово\t%s\t%d раз\n",w[r],f[r]);
    }
    fclose(f1);
    fclose(f2);
    system("pause");
}
Программа нормально компилируется и полностью выполняется, но не сохраняет ни 1 слова с онк или енк в массив w[20][15] и не реагирует на повторение. На мой взгляд либо я ошибся когда писал сохранение слова в отдельный массив, либо проблемы с кодировкой русского текста. Что посоветуете сделать?

Добавлено через 16 часов 18 минут
UPD: Ошибка найдена в 44 строке, код обновлен до рабочего, но повторения все еще считаются не правильно, ущу дальше...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 08:09     Найти слова с онк и енк в тексте
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 780
Записей в блоге: 10
19.05.2013, 08:25     Найти слова с онк и енк в тексте #2
Ты сравниваешь строки ,
просто сравнив два указателя ???
Их надо сравнивать через strcmp(s1,s2) если ноль то строки равны ))

Либо заводишь переменную
через фор сравниваешь поэлементно два массива )) если равно то к ПЕРЕМЕННОЙ++
потом после цикла , если длина массива(1го из них) совпадает с количеством равных символов то и строки равны ))))

Добавлено через 1 минуту
Пользуйся динамическими строками ,так проще будет )))
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
19.05.2013, 09:31  [ТС]     Найти слова с онк и енк в тексте #3
Цитата Сообщение от Qazan Посмотреть сообщение
Их надо сравнивать через strcmp(s1,s2) если ноль то строки равны ))
такой функции не знал, спасибо за информацию, сделал через цикл и все заработало как надо)
Yandex
Объявления
19.05.2013, 09:31     Найти слова с онк и енк в тексте
Ответ Создать тему
Опции темы

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