В чём ошибка?

Тема в разделе "C/C++/C#", создана пользователем Orion4ik, 20 дек 2010.

  1. Orion4ik

    Orion4ik Гость

    вот задача(c++) :
    Код (C++):
    #include <iostream>
    #include <fstream>
    #include <ctype.h>

    using namespace std;


    void main(void)
    {
    setlocale(LC_ALL,".1251"); //Подгрузим локаль

    ifstream filein("prog.cpp"); //Входной файл
    ofstream fileout("SortSlova.txt");

    char buffer[4096]={0}; //Буферная переменная на считывания строки из файла
    char word[1024]={0}; //Буферная переменная для слова
    char **Arr; // Динамический массив для слов
    int CoutWord = 0; //Счетчик слов

    filein.seekg(0,ios::end); //Установим позицию курсора в файле на конец, что бы найти его размер
    Arr = new char*[filein.tellg()]; //Выделим память с запасом (как будто каждый символ в файле - это слово)
    filein.seekg(0,ios::beg); //Установим курсор в файле в начало, что бы подготивить его для чтения

    cout<<"Результат до сортировки :" << endl;
    while (!filein.eof()) //Пока не достигнут конец файла
    {
    filein.getline(buffer,4096); //Читаем построчно
    char *ptr = word; //Установим указатель на буферную переменную для слова
    for (int i = 0; i<strlen(buffer); i++) //Обойдем полученную строку
    {
    if (!isspace((unsigned char)buffer[i]) && !ispunct((unsigned char)buffer[i]) && !iscntrl((unsigned char)buffer[i])) //Если нам не встретился символ пробел, знак пунктуации или любой управляющий то
    {
    *ptr++ = buffer[i]; //Пишим символ в буферную переменную слова и сдвигаем указатель
    }
    else //Если же все же встретился, то
    {
    if (strlen(word) != 0) //Проверим не равна ли длина слова 0 (вдруг 2 пробела подряд идут)
    {
    cout<< word << " ";
    Arr[CoutWord] = new char[512]; //Выделим память под слово (макс. длина слова 512 байт)
    strncpy(Arr[CoutWord], word, 512); //Скопируем в массив слов наше слово
    memset(word,0,1024); //Обнулим память буферной переменной слово
    ptr = word; //Установим указатель на начало буферной переменной
    CoutWord++; //Увеличиваем счетчик слов
    }
    }
    }
    }

    //Отсортируем массив слов
    for (int i = 0; i<CoutWord; i++) //Обойдем весь массив слов
    {
    for (int j = i; j<CoutWord; j++)
    {
    if (strcmp(Arr[i],Arr[j])>0) //Смысл в том то меняем слова местами если первое слово > предыдущего
    {
    strcpy(word,Arr[i]);
    strcpy(Arr[i],Arr[j]);
    strcpy(Arr[j],word);
    }
    }
    }

    cout<< endl <<"Результат после сортировки :" << endl;
    //Выведим на экран и запишим в файл
    for (int i = 0; i<CoutWord; i++)
    {
    fileout<<Arr[i]<< " "; //пишим в файл
    cout<<Arr[i]<< " "; //выводим на экран
    delete[] Arr[i]; //Сразу почистим за собой
    }
    fileout.close(); //Закроем файловые дискрипторы
    filein.close();
    delete[]Arr; //Удалим массив указателей
    }

    После запуска (ctrl + F5) выдаёт вот это:

    [​IMG]

    после нажатия "Повтор" выдаёт это:

    [​IMG]

    Не могу понять в чём дело. Обьясните пожалуйста!!! ;)
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Картинки стоит выкладывать на форуме.
    И еще не плохо писать само задание
     
Загрузка...
Похожие Темы - чём ошибка
  1. rn3rjd
    Ответов:
    4
    Просмотров:
    862
  2. IvendsI
    Ответов:
    2
    Просмотров:
    1.182
  3. rainprogrammer
    Ответов:
    3
    Просмотров:
    1.170
  4. dimat
    Ответов:
    2
    Просмотров:
    1.850
  5. m0tion
    Ответов:
    1
    Просмотров:
    102

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