Семинар 5 (Вариант 5)

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

Листинг программы

#include <iostream>

#include <fstream>

using namespace std;

 

int main()

{

setlocale(LC_ALL, "Russian");

 

ifstream fin("input5.txt");

if (!fin.is_open())

{

   cout << "Ошибка открытия файла" << endl;

   return 1;

}

fin.seekg(0, ios::end);

long len = fin.tellg();

char* buf = new char[len + 1];

buf[len] = '\0';

fin.seekg(0, ios::beg);

fin.read(buf, len);

fin.close();

 

cout << "Исходный текст" << endl;

cout << buf << endl;

cout << "Преобразованный" << endl;

int i = 0, fwL = 0, fwR = 0, swL = 0, swR = 0;

while (buf[i]!= '\0')

{

   while (i < len && (buf[i] == ' ' || buf[i] == '\n' || buf[i] == '.'

       || buf[i] == ',' || buf[i] == '!' || buf[i] == '?' || buf[i] == '\r'))

       cout << buf[i++];

   fwL = i;

   while (i < len && buf[i]!= ' ' && buf[i]!= '\n' && buf[i]!= '.'

       && buf[i]!= ',' && buf[i]!= '!' && buf[i]!= '?' && buf[i]!= '\r')

       i++;

   fwR = i;

 

   while (i < len && (buf[i] == ' ' || buf[i] == '\n' || buf[i] == '.'

       || buf[i] == ',' || buf[i] == '!' || buf[i] == '?' || buf[i] == '\r'))

       i++;

   swL = i;

   while (i < len && buf[i]!= ' ' && buf[i]!= '\n' && buf[i]!= '.'

       && buf[i]!= ',' && buf[i]!= '!' && buf[i]!= '?' && buf[i]!= '\r')

       i++;

   swR = i;

 

   if (swR == swL)

   {

       cout << buf + fwL;

   }

   else

   {

       for (int j = swL; j < swR; j++)

           cout << buf[j];

       for (int j = fwR; j < swL; j++)

           cout << buf[j];

       for (int j = fwL; j < fwR; j++)

           cout << buf[j];

   }

 

}

cout << endl;

 

delete[] buf;

return 0;

}

 

Скриншот работы

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: