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

Считать текст из файла, найти самое длинное слово и определить, сколько раз оно встретилось в тексте - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ динамический массив из ДЛЛ http://www.cyberforum.ru/cpp-beginners/thread5223.html
Здравствуйт, с наступившим!!!! Покажите, на примере, как вызват динамический массив из ДЛЛ, ну приблезительно сделать такое: в ДЛЛ есть код: ........ HRADAR_API double*...
C++ Помогите с лабой! В Си нужно из файла вызвать матрицу. В этой матрицы найти все ненулевые элементы и написать все значения и индексы этих значений.. Вот код..ток там чтот не так..посмотрите пожалуйста!!! ... http://www.cyberforum.ru/cpp-beginners/thread5222.html
C++ HELP
Здрасте. Не пойму почему два одинаковых проекта(часа 3 сравнивал, чуть ли не до запятой:(((() работают по разному!!!
Нужна прога, на языке С, С++ или Deiphi. Точнее три. C++
Тема: Анализ статистической независимости и удаление трендов. Спектральный анализ. Если эти понятия знакомы-отзовитесь.
C++ Определить в матрице фигуру с максимальной суммой http://www.cyberforum.ru/cpp-beginners/thread5172.html
В этом разделе я уже постил эту задачку, но дабы помочь тем кто хочет помочь мне у меня есть вариант кода(соответственно), где то там ошибка(не исключаю что код решен ваапще по неправильному...
C++ Помогите пожалуйста со структурой Помогите пожалуйста с задачей: Для каждого предприятия отрасли (количество предприятий не более 100) известен план и процент выполнения плана по семи показателям. Определить для каждого... подробнее

Показать сообщение отдельно
Гость
Сообщений: n/a

Считать текст из файла, найти самое длинное слово и определить, сколько раз оно встретилось в тексте - C++

09.01.2008, 17:11. Просмотров 1258. Ответов 0
Метки (Все метки)

Привет! Помогите пожалуйста разобраться с задачей:
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
Так вот на поиске самого длинного слова и его сохранения я и застрял.
Вот текст программы:
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
#include <fstream.h>
#include <windows.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
 
char* Rus(const char* text);
void Find(char to[], char from[]);
 
int main(){
    
    ifstream fin("c:\\cpp\\text.txt", ios::in, ios::nocreate);
    if(!fin){cout<<Rus("Ошибка открытия файла")<<endl; getch(); return 1;}
    
    const int len=81;
    char line[len], word[len], MaxWord[len];
    int Len_MaxWord= 0;
    while(fin.getline(line, len)){
        cout<<Rus(line)<<endl;
        Find(word, line);
        if(strlen(word) > Len_MaxWord){
            Len_MaxWord= strlen(word);
            strcpy(MaxWord,word);
        }
    }
    if(!Len_MaxWord){cout<<Rus("Пустой файл")<<endl; getch(); return 1;}
    cout<<endl<<Rus("Самое длинное слово >> ");
    cout<<Rus(MaxWord)<<endl;
    cout<<Rus("Его длина >> ")<<Len_MaxWord<<endl;
    getch();
    return 0;
}    
///////////////////////////////////////
char bufRus[256];
char* Rus(const char* text)
{
    CharToOem(text, bufRus);
    return bufRus;
}
///////////////////////////////////////
void Find(char to[], char from[]){
    int i= 0, Len_Count, Len_Max, iMax;
    iMax= -1; Len_Max= 0;
    char *p= from;
    char* c;
    while(*p != 0){
        while(ispunct(*p) || isspace(*p)) p++;
        char* c= p;
        for(Len_Count= 0; !ispunct(*p) && !isspace(*p) && *p != 0;
        p++, Len_Count++);
        if(Len_Count > Len_Max){
            Len_Max= Len_Count;
            iMax= *(p- Len_Max);
        }
    }
    int j= 0;
    if(iMax== -1) return;
    else{
        for(i= iMax; i< iMax+ Len_Max; j++, i++) to[j]= from[i];
        to[j] = 0;
    }
    return;
}
///////////////////////////////////////
Функция Find ведет себя не совсем правильно. Если текст в файле английский, то в принципе, она верно находит слово, но почему то здесь
C++
1
iMax= *(p- Len_Max);
указатель оказываеться на 3 позиции левее, чем нужно. Хотя предварительно проверяю указатели(p, c) они находяться где нужно: c- на 1 букве, p- на последней.
А вот если текст в файле русский, то все идет кувырком(неправильный размер слов, пропуск пробелов и знаков пунктуации). Я конечно догадываюсь, что это связанно с непониманием русской кодировки VC++ 6.0, но как это реализовать? Использовать функцию Rus при поиске и сохранении в символьных массивах?
Кто может помогите пожалуйста!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru