[solved] Zamiana kolejności grup znaków w stringu

0

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

0

w jakiej formie masz tego stringa ?

0

liczby porozdzielane spacjami.

0

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ć :)

0
#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

0
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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1