C/C++

Написать программу на С++

Дан текст. Выведите на экран все слова в обратном порядке.
Объясните весь код по строчно. (Объяснить что для чего)
Текст: Миром в узком смысле называется планета Земля с антропоцентрической, человеческой точки зрения, как сообщество людей.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "Миром в узком смысле называется планета Земля с антропоцентрической, человеческой точки зрения, как сообщество людей.";
string tmp;
for(int x = str.length() - 1; x >= 0; x--)
{
if(str[x] == ' ' || x == 0)
{
if(x == 0) tmp += str[x];
for(int y = tmp.length() -1; y >= 0; y--)
cout << tmp[y];
tmp = "";
cout << ' ';
}
else
{
tmp += str[x];
}
}
return 0;
}
Reshad Memmedov
Reshad Memmedov
70 714
Лучший ответ
Reshad Memmedov Со знаками препинания получилась белиберда. Но я не знаю, как можно сделать по другому.
#include
#include
#include
#include
#include

using namespace std;

int main(int argc, char **argv)
{
system("chcp 1251 > nul"); // Руссификация сообщений
setlocale(LC_ALL, "Russian");

string s= "Миром в узком смысле называется планета Земля с антропоцентрической, человеческой точки зрения, как сообщество людей.";
string s1="", s0="";

size_t pos1 =0; size_t pos2 =1; size_t sz; char c;

do
{
pos2= s.find(" ", pos1);
sz= pos2-pos1+1;
s0= s.substr(pos1, sz); pos1= pos2+1;
if ( ispunct(s0[sz-2]) )
{
c= s0[sz-2];
s0.insert(s0.begin(), c);
s0.erase(sz-1, 1);
}
if ( pos2==string::npos)
{
sz= s0.length();
if ( ispunct(s0[sz-1]) )
{
c= s0[sz-1];
s0.insert(s0.begin(), c);
s0[sz]= ' ';
}

}
s1.insert(0,s0);
}while(pos2!=string::npos);

cout << endl << "Текст нормальный" << endl << s << endl;
cout << "Текст перевёртыш" << endl << s1 << endl;
system("pause"); // system("pause > nul");
return 0;
}
ОЛ
Олег Луцюк
21 700