![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
avatara |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Подскажите пожалуйста как организовать запись чисел в строку, через тире или запятую
Например есть массив чисел: 1, 2, 3, 4, 6, 7, 10, 11, 12, 13, 14, 15, 22, 23, 24, 25, 27, 29, 40, 41 В строку необходимо вывести: 1 - 4, 6, 7, 10 - 15, 22 - 25, 27, 29, 40, 41 Заранее благодарен, Алексей |
|||
|
||||
LostSoul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 26.5.2007 Репутация: нет Всего: нет |
itoa(Val,m_Buf,10) поможет преобразовать в строку, а потоместь уже у стринга или сстринга есть оператор +=
|
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
-------------------- Подпись больше не нужна |
|||
|
||||
avatara |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Наверно я немного не так объяснил.
Сами числа заранее неизвестны. и такой вариант:
не пройдет. Есть массив, который заполняется любыми неповторяющимися числами. Далее этот массив сортируется. И если, допустим, идут подряд числа "1,2,3,4", то записываются как "1 - 4" (с 1 по 4) те, которые на попадают в диапазон, записываются просто через запятую и так далее. Еще один пример, на всякий случай Есть EditBox1, EditBox2, ListBox, Button1, Button2 В EditBox1 вы вводите число и по нажатию Button1 число добавляется в ListBox и так много раз (числа все разные) 1, 2, 4, 3, 7, 6, 12, 14, 13, 10, 11, 15 и т.д. (и необязательно такие числа, могут быть совершенно другие в пределах unsigned int) потом в ListBox числа сортируются и по нажатию Button2 в EditBox2 выводится уже запись следующего вида: 1 - 4, 6, 7, 10 - 15, 22 - 25, 27, 29, 40, 41 Вот и интересует, как осуществить проверку и подстановкутире и запятых там где это надо. Спасибо. |
|||
|
||||
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
Помоему все просто:
Берёшь первое число массива-вставляешь в строку,если след число равно пред+1 и не fl-вставляешь тире и fl =труе еспи след число равн пред+1 и fl ничего не делаешь, если число не равно пред + 1 и fl вставляешь пред число,запятую и число,fl=false Если число неравно пред+1 и не fl тогд запятую и число -------------------- Жизнь есть. |
|||
|
||||
avatara |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Проверьте пожалуйста:
Программа вылетает с сообщением Debug Assertion filed! Programm: ....... File: ......../atlsimpstr.h Line: 790 Expression nLength >= 0 Это сообщение отредактировал(а) avatara - 22.11.2007, 18:15 |
|||
|
||||
ASSERT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 25.10.2007 Репутация: нет Всего: нет |
avatara, это называется объединение - поиск:
Сортируем массив; В цикле перебираем все элементы, пользуясь след формулой сравнения форматируем строку как нужно: ЕСЛИ последующий член массива равен предыдущий + 1 - объединяем его с предыдущим ( записываем в отдельный массив или другую структуру данных, назовем его ОБЪЕДИНЕНИЕ ) ИНАЧЕ { выводим на экран первый и последний член ОБЪЕДИНЕНИЯ ( если он один, то, естественно, только первый ); очищаем объединение и продолжаем в том же духе далее } Если не получится реализовать - спрашивай, напишу в коде |
|||
|
||||
avatara |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Хотелось бы реализацию кода, не могу понять.
Тут еще одна проблема. Если в самом конце списка идут допустим ...... 22, 23, 24, 25, 26 То не будет ли Ошибкой условие - Следущее == Предыдущее +1 ведь после числа 26 уже нет других чисел (конец массива) Тогда в каких пределах производить цикл: от 0_го_элемента или от 1_го_элемента и до Кол_во_элементов -1 или Кол_во_элементов |
|||
|
||||
ASSERT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 25.10.2007 Репутация: нет Всего: нет |
Обрати внимание, что главный цикл начинается с 1 , а не с 0. От массива с ОБЪЕДИНЕНИЕМ ушел, ввел две переменные first и last - так будет лучше. И вообще, может, кто-нибудь предложит лучше ;)) Это сообщение отредактировал(а) ASSERT - 23.11.2007, 18:54 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |