Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Переставить местами


Автор: Лена 28.9.2009, 12:53
Программа формирует такие строки, где каждая точка эта Х и Y координата:
50.44876,30.487061 //это одна точка
или:
50.44876,30.487061,50.498579,30.568771 //две точки
или, например:
50.44876,30.487061,50.498579,30.568771,50.422081,30.591431,50.401953,30.500793 //четыре точки
и т.д.

Подскажите, пожалуйста, надежный алгоритм, чтобы в этих строках менять соседние координаты местами. Т.е. первая строка должна после обработки выглядеть так:
30.487061,50.44876
вторая:
30.487061,50.44876,30.568771,50.498579
и т.д.


Пробовала так, ничего не получается:
Код

 //убрать запятые из исходной строки txt
  auto_ptr <TStringList> ListWatch(new TStringList());
  Sysutils::TSysCharSet Tws,Tcs;  Tcs<<',';
  ExtractStrings(Tcs,Tws,txt.c_str(),ListWatch.get());

  AnsiString tmp;
  AnsiString txt1;
  //перестановка
  for(int i = 0; i < ListWatch->Count - 1; i++)
  {
   tmp = ListWatch->Strings[i];
   ListWatch->Strings[i] = ListWatch->Strings[i+1];
   ListWatch->Strings[i+1] = tmp;
   txt1 += ListWatch->Strings[i] + "," ;
  }

  //убрать последнию запятую
  txt1 = txt1.Delete(txt1.Length(),1);

  ShowMessage(txt +"\n" + txt1);


Может есть какой-то удобный контейнер STL для этих целей?

Автор: Alca 28.9.2009, 13:49
Цитата

Пробовала так, ничего не получается:

Пробуй еще

Добавлено через 1 минуту и 27 секунд
Цитата

Может есть какой-то удобный контейнер STL для этих целей?

http://www.cplusplus.com/query/search.cgi?q=swap  ?

Автор: leg501 28.9.2009, 14:14
лена как минимум в своем цикле ненужно проходить по каждому элементу а брать кратность изменения i =2 как миниму)

Автор: Лена 28.9.2009, 14:37
Цитата(leg501 @  28.9.2009,  14:14 Найти цитируемый пост)
 i =2 


Cпасибо. Тут была ошибка.

Автор: SVN74 28.9.2009, 23:00
Может применить что ни будь подобное:
    
Код

double a=50.67;
double b=88.34;
    MySwap(&a, &b);
    Memo1->Lines->Add(a);
    Memo1->Lines->Add(b);
//---------------------------------------------------------------------------
void MySwap(double* A, double* B)
{
  double Temp1 = *A;
  double Temp2 = *B;
  *B = Temp1; *A = Temp2;

}

Вот быстро накидал пример для перекидывания данных в массиве
Код

//---------------------------------------------------------------------------
#include <iostream.h>
using namespace std;
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
void MySwap(double* A, double* B)
{
  double Temp1 = *A;
  double Temp2 = *B;
  *B = Temp1; *A = Temp2;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    double *MS = new double[20];
   // Заполняем случайными числами для примера
    for(int i=0;i<20;i++)
    {
        MS[i] = double(rand()/100.1234) ;
        cout <<MS[i]<<endl;
    }
    // Перевертаем числа
    for(int i=0;i<20;i+=2)
    {
        MySwap(&MS[i],&MS[i+1]);
    }
  cout <<"==========================================="<<endl;
    // Выводим числа
    for(int i=0;i<20;i++)
    {
        cout <<MS[i]<<endl;
    }
    cin.get();
    delete [] MS;
    return 0;
}
//---------------------------------------------------------------------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)