![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Neo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.5.2004 Репутация: нет Всего: нет |
Сразу прошу простить, если подобный вопрос уже задавался, и я не заметил этого по темам.
В общем есть стока символов, которую надо упорядочить используя указаетли. Не знаю, но помоему метод изложенный ниже как-то называется, но я честно говоря никогда его не встречал. Просто получился вот такой код, но там есть какая-то оплошность. И в упор найти не могу. Опыта совсем мало. Может у кого глаз уже наточился ![]() В общем вот сам код.... -------------------------------------------------------------------- ...... char string[100]; void main() ... ... ... void Sort() { char *ch, *sh, t,*ip; ip=string; *sh='z'; for(int i=0; i<strlen(string)-1; i++) { ip=(ip+i); for(int j=0; j<strlen(string)-i; j++) { ch=ip; ch=(ch+j); if(*sh>*ch)sh=ch; if(j==strlen(string)-2) { t=*ip; *ip=*sh; *sh=t; } } } printf("Sorted: "); for(i=0; i<strlen(string); i++) { printf("%c ", string[i]); } printf("\n%d %d %d\n", t, *ch, *sh); printf("%p %p %p\n", t, ch, sh); } -------------------------------------------------------------------- Собственно последние вызовы printf только для просмотра значений указателей. Смысл алгоритма в кратце: есть два указателя. На стартовый элемент строки и на минимальный. При последнем выполнении внутреннего цикла значения стартового и минимального указателя меняются местами. А потом стартовый указатель смещается по строке далее. И все повторяется опять. Но только с каждым разом уменьшается количество интераций во внутреннем цикле. Много раз проверял и не могу понять, где напортачил. Товарищи, пожалуйста, если кто знает, есть ли вообще такой алгоритм или что-нибудь по данному вопросу - помогите пожалуйста. Заранее большое спасибо! Оффтоп: наконец попал по всей видимости в очень хорошую компанию. Очень надеюсь здесь найти общий язык со здешними обитателями и набраться так необходимого опыта и навыков профессионального программирования ![]() |
|||
|
||||
dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: 4 Всего: 25 |
Драсте
Легче было заново написать ![]() А вообще веши из серии ip = string; for(int i=0; i<strlen(string)-1; i++) { ip=(ip+i); .... явно не пральные - и тя ip в конце неизвестно на что будет указивать (пример : string = "abcdef\0"; strlen(string) - 1 = 5 i=0 ip указывает на "a" i =1 *ip = 'b' i=2 *ip = 'd' i=3 *ip = '\0' i=4 *ip = ??? -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
Neo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.5.2004 Репутация: нет Всего: нет |
Большое спасибо! Именно что получалось, после нескольких интераций значения указателей становились непредсказуемыми. Но никак не мог найте, в чем оплошность. На глаз все было нормально. Спасибо!
![]() |
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Делать было нечего, решил написать
![]()
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |