Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переставить местами, в строке 
:(
    Опции темы
Лена
Дата 28.9.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



Программа формирует такие строки, где каждая точка эта Х и 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 для этих целей?
PM MAIL   Вверх
Alca
Дата 28.9.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

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

Пробуй еще

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

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

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


--------------------
PM WWW ICQ Skype Jabber   Вверх
leg501
Дата 28.9.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.1.2008

Репутация: 1
Всего: 1



лена как минимум в своем цикле ненужно проходить по каждому элементу а брать кратность изменения i =2 как миниму)
PM MAIL   Вверх
Лена
Дата 28.9.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



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


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

PM MAIL   Вверх
SVN74
Дата 28.9.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Может применить что ни будь подобное:
    
Код

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


Это сообщение отредактировал(а) SVN74 - 28.9.2009, 23:49
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0748 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.