d2alex
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет! Помогите пожалуйста разобраться с задачей: Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте. Так вот на поиске самого длинного слова и его сохранения я и застрял. Вот текст программы: Код: #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 ведет себя не совсем правильно. Если текст в файле английский, то в принципе, она верно находит слово, но почему то здесь Код: указатель оказываеться на 3 позиции левее, чем нужно. Хотя предварительно проверяю указатели(p, c) они находяться где нужно: c- на 1 букве, p- на последней. А вот если текст в файле русский, то все идет кувырком(неправильный размер слов, пропуск пробелов и знаков пунктуации). Я конечно догадываюсь, что это связанно с непониманием русской кодировки VC++ 6.0, но как это реализовать? Использовать функцию Rus при поиске и сохранении в символьных массивах? Кто может помогите пожалуйста! |