Witam. Mam problem. mam przykładowego stringa:
1 2 34 531 2 432
i chciałbym go obrócić tak, by wyglądał w ten sposób:
432 2 531 34 2 1
czyli chciałbym zamienić grupy znaków miejscami. W jaki sposób mogę to osiągnąć?
//pozdrawiam
Witam. Mam problem. mam przykładowego stringa:
1 2 34 531 2 432
i chciałbym go obrócić tak, by wyglądał w ten sposób:
432 2 531 34 2 1
czyli chciałbym zamienić grupy znaków miejscami. W jaki sposób mogę to osiągnąć?
//pozdrawiam
w jakiej formie masz tego stringa ?
liczby porozdzielane spacjami.
nie o to mi chodziło, ale dobra - jeśli masz tego stringa w postaci tablicy charów no to lecisz w pętli od tyłu do napotkania spacji (jak napotkasz to kopiujesz to co jest za spacją), itd. cała filozofia to operacje na wskaźnikach i liczenie jak długie są liczby; jeśli masz tego stringa w postaci std::string no to można wykorzystać funkcję insert... może można to lepiej napisać, ale po tylu browarach to mózg mi zaczyna coś wolniej pracować :)
#include <cstdlib>
#include <iostream>
using namespace std;
string zamiana(string tekst);
int main(int argc, char *argv[])
{
string tekst = "132131 43242 6546 322 543 453 45 34";
cout << "String przed zamiana ->" << tekst << "<-" << endl;
tekst = zamiana(tekst);
cout << "String po zamianie ->" << tekst << "<-" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
string zamiana(string tekst)
{
string drugi;
int dlugosc = 0;
int wsk = 0;
for(int i = (tekst.length() - 1); i > -1; i--)
{
if(tekst[i] == ' ')
{
wsk = i+dlugosc+1;
for(int j = i+1; j <= wsk; j++)
drugi += tekst[j];
dlugosc = 0;
}
else
{
dlugosc ++;
}
if(i==0)
{
wsk = i+dlugosc-1;
for(int j = i; j <= wsk; j++)
drugi += tekst[j];
}
}
return drugi;
}
To tak na szybko sklecone, zostawia podwójne spacje
string reverseWordOrder(const string& str)
{
string result;
int i=0;
do {
int j=str.find_first_of(" \t,.?!@#&*", i);
if(j==string::npos) {
result.insert(0, str.substr(i));
break;
}
result.insert(0, str.substr(i,j-i));
result.insert(0, str.at(j));
i=j+1;
} wile(1);
return result;
}