Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2010, 13:04   #1
SpLIne
Новичок
Джуниор
 
Регистрация: 15.04.2010
Сообщений: 1
Вопрос сортировка массива строк в Си

Есть статический массив строк, ну в итоге двумерный массив символов. Необходимо отсортировать строки в нём по длине. Я пытаюсь оперировать непосредственно с указателями первого уровня, но не получается. Вот код:
Код:
void swap_1(char words[80][80]) {
  int min;
  char* temp;
  int size = lengthArray(words) - 1;
  int i = 0, m = 0, j;
  for (; i <= size - 1; i++) {
    m = i;
    min = strlen(words[i]);
    for (j = i + 1; j <= size; j++) {
      if (strlen(words[j]) < min) {
        min = strlen(words[j]);
        m = j;
      }
    }
    temp = (words + m);
    (words + m) = (words + i);
    (words + i) = temp;
  }
}
Компиль ругается на эти строки:
(words + m) = (words + i);
(words + i) = temp;

То есть так вот внаглую обменять значения указателей нельзя, почему?) И как правильно организовать сортировку (если уже есть такой вопрос, извините, я тут новичок, да и торопился очень, когда писал)
SpLIne вне форума Ответить с цитированием
Старый 15.04.2010, 13:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А старыми методами:
Код:
	char words[3][80]={"dfg","vb","etrte"},wrd[80];
    
	for (int i=0;i<2;i++){
  		for (int k=0;k<2;k++){
			if(strlen(words[k])<strlen(words[k+1])){
				strcpy(wrd,words[k]);
				strcpy(words[k],words[k+1]);
				strcpy(words[k+1],wrd);
			}
		}
	}
Чеб не воспользоваться?

К тому же по-моему:
(char*)(words + m) = (char*)(words + i);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.04.2010, 16:17   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от SpLIne Посмотреть сообщение
То есть так вот внаглую обменять значения указателей нельзя, почему?)
Код:
    (words + m) = (words + i);
    (words + i) = temp;
Подумайте ещё раз, чему Вы пытаетесь присвоить значение words+i и temp.
Это так называемое rvalue(right value - "правое значение"), то бишь результат выражения, а не какая-то конкретная ячейка в памяти. words - указатель, он расположен в 4-х байтах на 32-х битных машинах. words+m - выражение, которое складывает значение указателя со значением m - это не является ячейкой в памяти, понимаете о чём я? )
А вот temp = (words + m); вполне законная конструкция, temp получает значение words, смещённое на m. Только типы не совпадают немного =)

Последний раз редактировалось netrino; 15.04.2010 в 16:53.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка строк двухмерного массива EfiopianDIMON Общие вопросы C/C++ 9 26.05.2009 22:52
[С++] Сортировка 2ух строк двумерного массива. ReDev1L Помощь студентам 1 19.10.2008 03:45
Сортировка строк 2-мерного массива Mayday_007 Помощь студентам 1 04.04.2008 09:26
Сортировка строк sheva75 Microsoft Office Excel 3 06.02.2008 05:00
Сортировка массива строк StanPBH Помощь студентам 9 24.04.2007 00:34