Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 27.03.2011
Сообщений: 29

Сортировка строк в Мемо

17.03.2012, 23:23. Показов 3439. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Понимаю что похожие темы были ну я так чуток и не допонял....
Суть проблемы вот вчем: Прога считает количество символов в тексте(в мемо1) и пишет в мемо2 с новой строки ЧИСЛО символа(посчитаное прогой) и через \т сам символ. Нужно реализовать сортировку вот етих строк, пробывал етим способом:
C++
1
2
3
4
5
6
7
TStringList *rho1 = new TStringList;
//-------------------------------
    rho1->Text = Form1->Memo4->Text;
    rho1->Sort();
    Form1->Memo4->Text = rho1->Text;
 
delete rho1;
НО оно сортирует по первому символу числа т.е. столбец с числами:
1 =
2 "
11 ,
прадставляет как:
1 =
11 ,
2 "... надо в порядке убывания в нормальном виде т.е. 1 2 11
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2012, 23:23
Ответы с готовыми решениями:

Сортировка строк в Мемо
Добро всем! :senor: Как текст находящийся в Мемо отсортировать адреса по алфавиту? Вот текст в Мемо: Дата: 26.11.2014 ...

При нажатии пункта в ListBox выводить определенный диапазон строк в мемо
все что есть большая часть стырена из интернетов по сути лишь интерфейс мой, в общем программа вытаскивает в мемо все что записывает в...

Запись нескольких строк из мемо в бд
Всем привет. Среда разработки c++ builder. C blob полями никогда не работал, подскажите как из мемо поля записать в БД примечание, которое...

8
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.03.2012, 23:56
Цитата Сообщение от Dfoer Посмотреть сообщение
1 2 11
Так по убыванию или по возрастанию?
0
1 / 1 / 0
Регистрация: 27.03.2011
Сообщений: 29
18.03.2012, 00:05  [ТС]
По убыванию, завтыкал
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.03.2012, 00:17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int __fastcall CompareIntAsc(TStringList *List, int Index1, int Index2)
 {
  int a = atoi(List->Strings[Index1].c_str());
  int b = atoi(List->Strings[Index2].c_str());
  return a < b;
 }
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TStringList *list = new TStringList();
   list->Assign(ListBox1->Items);
   //list->CustomSort(CompareStringDesc);
   list->CustomSort(CompareIntAsc);
   ListBox1->Items->Assign(list);
   delete list;
   list = NULL;
}
2
 Аватар для Sergey-K
238 / 229 / 58
Регистрация: 27.10.2011
Сообщений: 249
18.03.2012, 02:04
Лучший ответ Сообщение было отмечено как решение

Решение

Вот еще вариант сортировки. Так называемая "натуральная" сортировка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <string>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
int NumericCompare(const std::string &s0, const std::string &s1)
{
  size_t i = 0, j = 0;
  for(; i < s0.size() && j < s1.size();)
    {
      std::string t0(1, s0[i++]);
      while(i < s0.size() && !(isdigit(t0[0]) ^ isdigit(s0[i])))
        t0.push_back(s0[i++]);
      std::string t1(1, s1[j++]);
      while(j < s1.size() && !(isdigit(t1[0]) ^ isdigit(s1[j])))
        t1.push_back(s1[j++]);
      if(isdigit(t0[0]) && isdigit(t1[0]))
        {
          size_t p0 = t0.find_first_not_of('0');
          size_t p1 = t1.find_first_not_of('0');
          if(p0 == std::string::npos)
            t0 = "";
          else
            t0 = t0.substr(p0);
          if(p1 == std::string::npos)
            t1 = "";
          else
            t1 = t1.substr(p1);
          if(t0.size() != t1.size())
            return t0.size() < t1.size() ? -1 : 1;
        }
      if(t0 != t1)
        return t0 < t1 ? -1 : 1;
    }
  return i == s0.size() && j == s1.size() ? 0 : i != s0.size() ? 1 : -1;
}
//---------------------------------------------------------------------------
int __fastcall SortCompare(TStringList *List, int Index1, int Index2)
{
  return NumericCompare(List->Strings[Index1].c_str(),
    List->Strings[Index2].c_str());
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TStringList *list = new TStringList();
  list->Assign(Memo1->Lines);
  list->CustomSort(SortCompare);
  Memo1->Lines->Assign(list);
  delete list;
}
//---------------------------------------------------------------------------
Исходный текст:
Code
1
2
3
4
5
Img0
Img11
Img120
Img20
Img3
Результат:
Code
1
2
3
4
5
Img0
Img3
Img11
Img20
Img120
4
1 / 1 / 0
Регистрация: 27.03.2011
Сообщений: 29
18.03.2012, 02:43  [ТС]
Чето оно не коректно считает, либо я чето не так делаю....
Закинул в
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
int __fastcall CompareIntAsc(TStringList *List, int Index1, int Index2)
 {
  int a4 = atoi(List->Strings[Index1].c_str());
  int b4 = atoi(List->Strings[Index2].c_str());
  return a4 < b4;
 }
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{......
    {//в конец кинул ето
   TStringList *list = new TStringList();
   list->Assign(Memo4->Lines);
   //list->CustomSort(CompareStringDesc);
   list->CustomSort(CompareIntAsc);
   Memo4->Lines ->Assign(list);
   delete list;
   list = NULL;
}
или так нельзя???
Изображения
 
0
1 / 1 / 0
Регистрация: 27.03.2011
Сообщений: 29
22.03.2012, 00:36  [ТС]
Сделал по методу Sergey-K, все коректно работает, Огромное спасибо!
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.03.2012, 15:43
Цитата Сообщение от Dfoer Посмотреть сообщение
Сделал по методу Sergey-K, все коректно работает, Огромное спасибо!
Ты просил сделать сортировку цифр, а не строк, квот цифры оно сортирует исключительно, а на строки там другой метод
0
 Аватар для Sergey-K
238 / 229 / 58
Регистрация: 27.10.2011
Сообщений: 249
09.04.2012, 22:15
Переписал функцию "натуральной" сортировки без использования #include <string>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
int __fastcall SortCompare(TStringList *List, int Index1, int Index2)
{
  AnsiString s0 = List->Strings[Index1];
  AnsiString s1 = List->Strings[Index2];
  int i = 1, j = 1;
  for(; i <= s0.Length() && j <= s1.Length();)
    {
      AnsiString t0 = s0[i++];
      while(i <= s0.Length() && !(isdigit(t0[1]) ^ isdigit(s0[i])))
        t0 += s0[i++];
      AnsiString t1 = s1[j++];
      while(j <= s1.Length() && !(isdigit(t1[1]) ^ isdigit(s1[j])))
        t1 += s1[j++];
      if(isdigit(t0[1]) && isdigit(t1[1]))
        {
          while(t0 != "" && t0[1] == '0')
            t0.Delete(1, 1);
          while(t1 != "" && t1[1] == '0')
            t1.Delete(1, 1);
          if(t0.Length() != t1.Length())
            return t0.Length() < t1.Length() ? -1 : 1;
        }
      if(t0 != t1)
        return t0.AnsiCompare(t1);
    }
  return i == s0.Length() + 1 && j == s1.Length() + 1 ? 0 :
    i != s0.Length() + 1 ? 1 : -1;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TStringList *list = new TStringList;
  list->Assign(Memo1->Lines);
  list->CustomSort(SortCompare);
  Memo1->Lines->Assign(list);
  delete list;
}
//---------------------------------------------------------------------------
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2012, 22:15
Помогаю со студенческими работами здесь

подскажите пожалуйста как сделать заполнение одного мемо количеством строк равных другому мемо?
Подскажите пожалуйста есть 2 memo в одному допустим 20 строк а в другом 5 как сделать что бы при нажатии на button второй memo заполнялся...

Сортировка в мемо
мне надо чтоб все строки мемо вертикально поменялись местами. То есть: 1 2 3 4 5 поменялись на:

Сортировка в мемо
как сделать сортировку в мемо по убыванию и возрастанию нажатием по стрелкам в тул баре?

Сортировка в алфавитном порядке в мемо
задание звучит так. Отсортировать слова в алфавитном порядке в мемо... записал программу так, не могу понять как их отсортировать ...

Отображением строк в мемо
Всем доброго времени суток. Сегодня решил написать генератор паролей. Он у меня получился, но когда я генерирую несколько паролей, то при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru