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

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

15.07.2010, 18:32. Показов 1984. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С помощью компонента Memo заполнить строковый массив. Упорядочить символы каждой строки по алфавиту.
Так как знакома очень поверхностно, попробовала сделать задание и вот что получила:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{ int f;
f=Memo1->SelLength;
 for(int i=0;i<f;i++){
 for(int j=0;j<f;j++) {
 int a= int(Memo1->Text[j]);
 int b= int(Memo1->Text[j+1]);
 if(a>b)
 { char buf=Memo1->Text[j];
   Memo1->Text[j]= Memo1->Text[j+1];
    Memo1->Text[j+1]=buf;
  }
  }}
 Memo2->Lines->Add(Memo1->Text);
}
Запускается, но вылетает ошибка при выполнении. Может, есть какие идеи, как реализовать это задание по-другому?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2010, 18:32
Ответы с готовыми решениями:

Подсчет символов в строке
Здравствуйте! Объясните пожалуйста, почему при нахождении количества символов в полученной из TStringList функцией m.Length(), мне пришлось...

Удаление символов в строке
это весь код кнопки.при каждом новом декодировании, даже одного и того же файла, удаляется разное количество символов(удаляет заданное...

Замена символов в строке
Подскажите пожалуйста, каким образом можно заменить символы в строке! Например: Исходная строка: Привет, Анна. Должно...

7
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
15.07.2010, 20:22
AnsiString. символы в строке нумеруются с единицы( наследие паскакаля и делфей). сам этому не рад=(
1
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 26
15.07.2010, 20:29  [ТС]
radiohobbyt, а можно поподробнее? AnsiString как правильно это использовать? Я,видимо, что-то не то делаю.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
15.07.2010, 21:53
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от radiohobbyt Посмотреть сообщение
AnsiString
А кто сказал, что здесь будет именно AnsiString?
В версиях С++ Builder после 2007 начали активно использовать UnicodeString, который хранит двухбайтовое представление символа...

Aelin, сортировку можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int cmp_values(const void *a, const void *b){
  return *(char*)a - *(char*)b;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int size = Memo1->Text.Length();
  char *text = new char[size + 1];
  strcpy(text,Memo1->Text.t_str());
  std::qsort(text, size, sizeof(char), cmp_values);
  Memo1->Text = text;
  delete []text;
}
//---------------------------------------------------------------------------
Если нужно будет двухбайтовое представление - переделывайте под wchar_t
3
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 26
16.07.2010, 13:30  [ТС]
MikeSoft, спасибо, Ваш вариант работает, но не могли бы Вы подсказать, как мне сделать, чтобы сортировка проводилась не во всём тексте, а только в каждой строке? Предположим, в Memo1 у меня такая запись:
sdasda
qecfh
adqwer
А в Memo2 я должна получить:
aaddss
cefhq
adeqrw
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
16.07.2010, 13:44
Цитата Сообщение от Aelin Посмотреть сообщение
а только в каждой строке
Очень просто. Для этого и передавать вы должны текст построчно. Например, так:
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i < Memo1->Lines->Count; i++) {
  int size = Memo1->Lines->Strings[i].Length();
  char *text = new char[size + 1];
  strcpy(text,Memo1->Lines->Strings[i].t_str());
  std::qsort(text, size, sizeof(char), cmp_values);
  Memo1->Lines->Delete(i);
  Memo1->Lines->Insert(i,text);
  delete []text;
}
1
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 26
19.07.2010, 17:42  [ТС]
И вновь я прошу помощи. Теперь требуется сделать так, чтобы повторяющиеся символы в отсортированном массиве повторялись только один раз. Например, было eeaa, стало ае.
У меня получается такой код(добавляю сразу после сортировки):
C++
1
2
3
4
5
6
7
8
9
10
11
char *text1=new char[size+1];
  for(int j=0;j<size;j++)
     {
     int z=0;
     for(int k=0;;k++)
     {
     if(text[k]==text[k+1])z++;
     else break;
     }
       text1[j]=text[j+z]; 
 }
Но проблема в том, что он откидывает только лишние символы у первого значения. То есть на выходе я получаю aee.

Разобралась.
0
0 / 0 / 0
Регистрация: 21.05.2015
Сообщений: 3
15.10.2015, 20:04
Подскажите, как Вы справились?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2015, 20:04
Помогаю со студенческими работами здесь

Удаление символов в строке Memo
Добрый день! Требуется удалить первые десять символов в каждой строке Memo. Использую следующий код: int count =...

Удаление повторяющихся символов в строке
Столкнулся с проблемой удаления одинаковых символов в строке, вот сделал 2 алгоритма но обо почему-то удаляют только все повторяющиеся...

Добавление индекса к строке символов
Здравствуйте! Пишу симплекс метод. CppBuilder6-Ole-Excel. Не получается поставить индекс у свободных переменных. for(i = 1; i &lt;=...

Сортировка чисел в строке
Ввести строку символов, состоящую из любых произвольных чисел, разделенных пробелами. Вывести на экран числа этой строки в порядке...

Количество символов в строке столбцов в гриде
Загружаю данный из txt в StringGrid. С количеством строк всё просто и понятно, но как выставить количество столбцов что бы было в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru