Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2010, 21:37   #1
ZET78
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 60
По умолчанию шифрование Шеннона

Добрый день, столкнулся с такой проблемой, я реализовал алгоритм шеннона для поиска одинаковых символов в файле, но программа работает только в том случае, если в ней идет сплошная строка, а если есть пробелы то она проверяет только последнее слово, как сделать так, что она работала с большими текстами, в которых много пробелов?
вот код:
Код:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <fstream.h>
#include <math.h>
void main(){
    char str[1000];
ifstream ofile;
ofstream infile;
        ofile.open("1.txt");
                if(!ofile){cout<<"\n File not found "; }
                        while(!ofile.eof()){
                                ofile>>str;
                        }
 int chars[256]={0};
for(int i=0; str[i]; i++){
        chars[str[i]]++;
}
cout<<"\n Symbol ||| kol raz   ";
for(int i=0;i<256;i++){
if(chars[i]){
           cout<<"\n    "<<char(i)<<"           "<<chars[i]<<"\n ";
}
}
system("pause");
}
ZET78 вне форума Ответить с цитированием
Старый 08.09.2010, 22:44   #2
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Код:
 while(!ofile.eof()){
   ofile>>str;
}
Вот тут проблема.

Оператор потока >> считывает по слову а условие выхода из цикла - конец файла. Вот и получается, что считывает по слову до конца файла, а когда выходит из цикла, то в str только последнее слово и остается.

Пробуй так:
Код:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <fstream.h>
#include <math.h>
void main(){
    char str[1000];
ifstream ofile;
ofstream infile;

 ofile.open("1.txt");

 int chars[256]={0};

  if(!ofile)cout<<"\n File not found ";

while(!ofile.eof()){
     ofile>>str;
                        
for(int i=0; str[i]; i++)  chars[str[i]]++;

}
cout<<"\n Symbol ||| kol raz   ";
for(int i=0;i<256;i++){
if(chars[i]){
           cout<<"\n    "<<char(i)<<"           "<<chars[i]<<"\n ";
}
}
system("pause");
}
Но пробелы считаться не будут, да и лучше используй getch().

А еще лучше отобрази файл в память...

Последний раз редактировалось |{ot; 08.09.2010 в 22:49.
|{ot вне форума Ответить с цитированием
Старый 08.09.2010, 23:15   #3
ZET78
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 60
По умолчанию

спасибо, сейчас попробую
ZET78 вне форума Ответить с цитированием
Старый 08.09.2010, 23:24   #4
ZET78
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 60
По умолчанию

все замечательно работает, спасибо еще раз!
ZET78 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование sweeach Компоненты Delphi 3 03.08.2010 02:01
ШИФРОВАНИЕ fobass Работа с сетью в Delphi 4 14.06.2010 20:32
Шифрование risc Общие вопросы Delphi 1 25.02.2010 21:48
Архивация методом Шеннона-Фано Ketu Паскаль, Turbo Pascal, PascalABC.NET 2 13.10.2008 19:42