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

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

17.03.2012, 23:23. Показов 3477. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru