Условие: Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.
Листинг программы
#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;
}
Скриншот работы