O
Orion4ik
вот задача(c++) :
После запуска (ctrl + F5) выдаёт вот это:
после нажатия "Повтор" выдаёт это:
Не могу понять в чём дело. Обьясните пожалуйста!!!
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) выдаёт вот это:
Ссылка скрыта от гостей
после нажатия "Повтор" выдаёт это:
Ссылка скрыта от гостей
Не могу понять в чём дело. Обьясните пожалуйста!!!