• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

В чём ошибка?

  • Автор темы Orion4ik
  • Дата начала
O

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) выдаёт вот это:



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



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

vital

Картинки стоит выкладывать на форуме.
И еще не плохо писать само задание
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!