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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 11:30   #1
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию Переделка кода

Всем доброго времени суток!!!
Вот мой код:
Код:
#include <string.h>
#define LEN 256
#include <stdio.h>
#include <ctype.h>
#include <iostream.h>
void delSep(char * str)
{
    char *beg, *end;
    char *sep=".,:;?!(){}[]-";
    while(end=strpbrk(str, sep))
    {
	beg=end;
	while(*(end+1) && !isalnum(*(end + 1))) end++;
	while(!isalnum(*beg) && beg>=str) beg--;
	while(!isspace(*beg) && beg>=str) beg--;
	while(!isalnum(*beg) && beg>=str) beg--;
	if(beg>=str)
	    *(++beg)=' ';
	strcpy(beg+1, end+1);
    }
}

void writeStr(char * str, FILE * in, FILE * out)
{
    if(fgets(str, LEN, in))
    {
	delSep(str);
	fputs(str, out);
	if(str[strlen(str)-1]!='\n')
	    fputc('\n', out);
    }
}

int main()
{
    FILE *f1, *f2, *f3;
    char buf[LEN]="";
    char c1[20],c2[20],c3[20];
    cout<<"vvedite_nazvanie_file_1"<<endl;
    cin>>c1;
    cout<<endl;
    if (!(f1=fopen (c1, "rt"))) {
  cout<<"file_1_ne_otkrit\n"<<endl;
  }
    cout<<"vvedite_nazvanie_file_2"<<endl;
    cin>>c2;
    cout<<endl;
    if (!(f2=fopen (c2, "rt"))) {
  cout<<"file_2_ne_otkrit\n"<<endl;
  }
    cout<<"vvedite_nazvanie_file_3"<<endl;
    cin>>c3;
    cout<<endl;
    if (!(f3=fopen (c3, "wt"))) {
  cout<<"file_3_ne_otkrit\n"<<endl;
  }
while(!feof(f1) || !feof(f2))
    {
	writeStr(buf, f1, f3);
	writeStr(buf, f2, f3);
    }
    fcloseall();
    return 0;
}
Проблема такая, мне нужно переделать его в ООП, чтобы использовались классы, конструкторы, деструкторы...
Но я совершенно про это не знаю...
Помогите пожалуйста, с переделкой данного кода...

Последний раз редактировалось Stilet; 19.10.2009 в 11:44.
hen вне форума Ответить с цитированием
Старый 19.10.2009, 11:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что делает то программка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.10.2009, 11:51   #3
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что делает то программка?
Отткрывает два текстовых файла, и производит чересстрочное слияние, в выходной файл, в выходном удалются все слова после которых стоит знак препинания... Вот чем она занимается...
hen вне форума Ответить с цитированием
Старый 19.10.2009, 12:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я конечно не спец в Сях писюкать но что-то типа такого:
Код:
//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <string.h>
#define LEN 256
#include <stdio.h>
#include <ctype.h>
#include <iostream.h>

//---------------------------------------------------------------------------

#pragma argsused
class aga{
 public:
  void delSep(char * str)
{
	char *beg, *end;
	char *sep=".,:;?!(){}[]-";
	while(end=strpbrk(str, sep))
	{
	beg=end;
	while(*(end+1) && !isalnum(*(end + 1))) end++;
	while(!isalnum(*beg) && beg>=str) beg--;
	while(!isspace(*beg) && beg>=str) beg--;
	while(!isalnum(*beg) && beg>=str) beg--;
	if(beg>=str)
		*(++beg)=' ';
	strcpy(beg+1, end+1);
	}
}

void writeStr(char * str, FILE * in, FILE * out)
{
	if(fgets(str, LEN, in))
	{
	delSep(str);
	fputs(str, out);
	if(str[strlen(str)-1]!='\n')
		fputc('\n', out);
	}
}

};

void _tmain()
{

   FILE *f1, *f2, *f3;
    char buf[LEN]="";
    char c1[20],c2[20],c3[20];
    cout<<"vvedite_nazvanie_file_1"<<endl;
    cin>>c1;
    cout<<endl;
    if (!(f1=fopen (c1, "rt"))) {
  cout<<"file_1_ne_otkrit\n"<<endl;
  }
    cout<<"vvedite_nazvanie_file_2"<<endl;
    cin>>c2;
    cout<<endl;
    if (!(f2=fopen (c2, "rt"))) {
  cout<<"file_2_ne_otkrit\n"<<endl;
  }
    cout<<"vvedite_nazvanie_file_3"<<endl;
    cin>>c3;
    cout<<endl;
    if (!(f3=fopen (c3, "wt"))) {
  cout<<"file_3_ne_otkrit\n"<<endl;
  }


 aga *ugu= new aga;
  /* */
    while(!feof(f1) || !feof(f2))
	{
	ugu->writeStr(buf, f1, f3);
	ugu->writeStr(buf, f2, f3);
    }
    fcloseall();

  /* */
 delete ugu;


}
//---------------------------------------------------------------------------
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.10.2009, 13:52   #5
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

мне кажется вот так это будет красившей выглядеть:
в мейне теперь чистота и порядок ))
Код:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <iostream.h>
//#include <iostream>
//using namespace std;
#define LEN 256

class myClass
{
public:
	void writeStr(char * str, FILE * in, FILE * out) ;
	void delSep(char * str);
	void newFunc() ;
};
//------------------------------//
void myClass::delSep(char * str)
{
    char *beg, *end;
    char *sep=".,:;?!(){}[]-";
    while(end=strpbrk(str, sep))
    {
	beg=end;
	while(*(end+1) && !isalnum(*(end + 1))) end++;
	while(!isalnum(*beg) && beg>=str) beg--;
	while(!isspace(*beg) && beg>=str) beg--;
	while(!isalnum(*beg) && beg>=str) beg--;
	if(beg>=str)
	    *(++beg)=' ';
	strcpy(beg+1, end+1);
    }
}
//------------------------------//
void myClass::writeStr(char * str, FILE * in, FILE * out)
{
    if(fgets(str, LEN, in))
    {
	delSep(str);
	fputs(str, out);
	if(str[strlen(str)-1]!='\n')
	    fputc('\n', out);
    }
}
//------------------------------//
void myClass::newFunc()
{
	  FILE *f1, *f2, *f3;
    char buf[LEN]="";
	 char c1[20],c2[20],c3[20];
    cout<<"vvedite_nazvanie_file_1"<<endl;
    cin>>c1;
    cout<<endl;
    if (!(f1=fopen (c1, "rt"))) 	 {
  cout<<"file_1_ne_otkrit\n"<<endl;
  }
    cout<<"vvedite_nazvanie_file_2"<<endl;
    cin>>c2;
    cout<<endl;
    if (!(f2=fopen (c2, "rt"))) 	 {
  cout<<"file_2_ne_otkrit\n"<<endl;
  }
    cout<<"vvedite_nazvanie_file_3"<<endl;
    cin>>c3;
    cout<<endl;
    if (!(f3=fopen (c3, "wt"))) 	 {
  cout<<"file_3_ne_otkrit\n"<<endl;
  }

	 	
	while(!feof(f1) || !feof(f2))
    {
	writeStr(buf, f1, f3); 
	writeStr(buf, f2, f3);
    }
   fcloseall();
}
//------------------------------//

int main()
{
	myClass ob; 
	ob.newFunc() ;  
	return 0 ;
}
m0nax вне форума Ответить с цитированием
Старый 19.10.2009, 14:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в мейне теперь чистота и порядок ))
Логично. Теперь автору вибирать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2009, 17:58   #7
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Логично. Теперь автору вибирать.

Stilet и m0nax, большое спасибо..

Скорее мне более подойдет второй вариант..

Вот только пара вопросов по второму варианту записи кода
Код:
int main()
{
	myClass ob; \\здесь объявляется класс??
	ob.newFunc() ;  \\а здесь происходит вызов функции??
	return 0 ;
}
Получается блок основной части программы выглядет как первая или как вторая блок-схема??


Прост чтото не помню как класс в блок-схеме оформляется..

Последний раз редактировалось hen; 24.10.2009 в 18:11.
hen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделка задачи на Record Impario Помощь студентам 14 16.02.2009 18:49
переделка БД со списком - Паскаль..записи sancho-spb Помощь студентам 1 23.04.2008 19:31
Двумерные маcсивы(переделка). Hostlman Помощь студентам 2 26.12.2007 19:14