| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Строка символов и указатели.... |
| Автор: Neo 15.5.2004, 03:19 |
| Сразу прошу простить, если подобный вопрос уже задавался, и я не заметил этого по темам. В общем есть стока символов, которую надо упорядочить используя указаетли. Не знаю, но помоему метод изложенный ниже как-то называется, но я честно говоря никогда его не встречал. Просто получился вот такой код, но там есть какая-то оплошность. И в упор найти не могу. Опыта совсем мало. Может у кого глаз уже наточился В общем вот сам код.... -------------------------------------------------------------------- ...... 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 15.5.2004, 07:30 | ||
Драсте
Легче было заново написать А вообще веши из серии 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 20.5.2004, 00:17 |
| Большое спасибо! Именно что получалось, после нескольких интераций значения указателей становились непредсказуемыми. Но никак не мог найте, в чем оплошность. На глаз все было нормально. Спасибо! |
| Автор: Baa 20.5.2004, 01:16 | ||
Делать было нечего, решил написать
|