Консультация № 158413
22.01.2009, 11:05
0.00 руб.
0 0 0
Здравствуйте! Помогите мне пожалуйста, 1) вобщем есть список, в нем хранятся символы. Эти символы нужно перекинуть в файл. Я использовал fputc, fprintf, fgets и др., но все они заносят в файл какие-то кракозябры!
И еще, 2) есть список, в нем цифры. Эти цифры образуют число. Так вот, это число мне нужно сложить другим числом, допустим с 0. Как вот это реализовать на С++?

А смысл всей лабораторной такой: есть файл, в нем набор символов. Нужно в этом файле 1. найти РЕГУЛЯРНЫЕ СЛОВА(состоят из больших английских согласных букв). Если находится таковое, то оно помещается в другой файл; 2. найти числа, закинуть все числа в третий файл, разделив пробелами и найти сумму эти чисел. Все нужно делать через списки. т.е если символ подходит под условие, то он помещается в список, далее смотрится следующий символ, если подходит под условие, заносится в список, если нет - либо очищается список, либо содеожимое списка зпносится в файл, а потом очищается.

Помогите! Заранее спасибо!

Приложение:
// lab4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <math.h>


struct node
{
char key; //перемнная в поле
node* next; // указатель на следующий элемент
};

//добавление в список нового элемента
void Add(node* &head, char k) //используются список head и переменная К
{
if (head==NULL) //если списка нет
{
head=new node; // создается новый элемент
head->key=k; // в новом элементе хранится знач кеу=к
head->next=NULL; //элемент указывает на конец спмска
}
else //если список есть
{
node* temp=head; //объявляется перременная
while (temp->next !=NULL) //пока ссылка на следующий элемент существует..
temp=temp->next; //переходить на следующий элемент
temp->next=new(node); //если не сущ. следующего элемента, создать его
temp=temp->next; //в переменную Темр присваивается значение следующей переменной
temp->key=k; //заполняет его
temp->next=NULL; //следующей переменной не сущечтвует
}
}

//вывод на печать список
void Print(node* head)
{
node* temp=head;
while (temp !=NULL) // пока не конец списка...
{
printf("%c",temp->key); //..выводить элемент..
temp=temp->next; //.. и переходить на следующий
}
}

void FPrint(node* head)
{
FILE *FO;
node* temp=head;
if( (fopen_s(&FO , "output1.txt", "w+" )) == NULL )
{
while (temp !=NULL) // пока не конец списка...
{
//fputc(temp->key,FO);
//fprintf(FO, "%lf", temp->key);
//fgets(temp->key,2,FO);
temp=temp->next; //.. и переходить на следующий
}
}
}

//очистка списка
void KillList(node* &head)
{
if (head==NULL) return; //если список пуст, ничего не делать
KillList(head->next); //удаляется следующий элемент
delete head ; //удаляется на него ссылка..
head=NULL; //..и указывается ссылка на конец списка

}

int _tmain(int argc, _TCHAR* argv[])
{
node* list=NULL;
char ch;
int F;
char c=' ';
FILE *FI, *FO, *FO2;

//поиск регулярных слов
if( (fopen_s( &FI, "input.txt", "rt" )) == 0 )
{
if( (fopen_s(&FO , "output1.txt", "wt" )) == NULL )
{
F=0;
while (!feof(FI))
{
fread( &ch,1,1,FI );
if (ch==' ')
{
F=0;
if (list!=NULL) { Print(list); fwrite(&list,sizeof(list),1,FO); cprintf(" "); KillList(list); };
}
else
{
if (!((ch=='B') || (ch=='C') || (ch=='D') || (ch=='F') || (ch=='G') || (ch=='H') || (ch=='K') || (ch=='L') || (ch=='M') || (ch=='N') || (ch=='P') || (ch=='Q') || (ch=='R') || (ch=='S') || (ch=='T') || (ch=='V') || (ch=='W') || (ch=='X') || (ch=='Y') || (ch=='Z')))
{KillList(list); F=1;}
else
if (F==0) Add(list, ch);

};
}
} else printf("error output file\n\r");
}
else printf("error input file\n\r");
//конец поиска

cout<<'\n';

//ищет числа и считает их сумму
list=NULL;
int sum;
int summa;
char a;
sum=0;
summa=0;
if( (fopen_s( &FI, "input.txt", "r" )) == 0 )
{
if( (fopen_s(&FO2 , "output2.txt", "w+" )) == NULL )
{
F=0;
while (!feof(FI))
{
fread( &ch,1,1,FI );
a=ch;
if (ch==' ')
{
F=0;
if (list!=NULL) { Print(list); summa=summa; fwrite(&list,5,5,FO2); cprintf(" "); KillList(list); };
}
else
{
if (!((ch>='0') && (ch<='9')))
{KillList(list); F=1;}
else
if (F==0) {Add(list, ch); printf("%d\n",a," ");}

};
}
} else printf("error output file\n\r");
//конец поиска
}
else printf("error input file\n\r");
cout<<'\n';
printf("close %i files",_fcloseall());
cout<<"\nsumma="<<summa;

getch();
return 0;
}

Обсуждение

Форма ответа