Скопировать из списка в файл

Тема в разделе "Общие вопросы по С и С++", создана пользователем xDyPx, 21 янв 2009.

Статус темы:
Закрыта.
  1. xDyPx

    xDyPx Гость

    Вообще такая лаба у меня:
    Из исходного файла скопировать во второй файл все регулярные слова, не содержащие гласных букв(которые содержат ТОЛЬКО большие английские буквы), разделив их пробелами, а в третий – все числа, подсчитав их общую сумму.

    Вот текст всей программы:
    =========================
    [codebox]// 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);
    //fwrite(temp->key,sizeof(head), 1, 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;
    int sum;
    int summa;
    int a;
    //поиск регулярных слов
    if( (fopen_s( &FI, "input.txt", "r" )) == 0 )
    {
    if( (fopen_s(&FO , "output1.txt", "w+" )) == 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;
    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+sum; fwrite(&list,5,5,FO2); cprintf(" "); KillList(list); };
    }
    else
    {
    if (!((ch>='0') && (ch<='9')))
    {KillList(list); sum=0; F=1;}
    else
    if (F==0) {Add(list, ch); sum=sum+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;
    }[/codebox]



    =========================
    Три файла хранятся в подпапке с названием, как у самого проекта. Я пользуюся Visual Studio 9.

    У меня возникла сложность в копировании из списка этих самых регулярных слов и чисел в файлы, там копируется, но какая-то фигня. И когда подсчитывается сумма чисел в первом файле, то считается сумма номеров в аски таблице, а не самого числа. Помогите, очень надо!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей