Сортировка строк по алфавиту с использованием массива указателей - PullRequest
1 голос
/ 11 марта 2019

Я хочу отсортировать строки в алфавитном порядке, используя функцию подкачки. Функция подкачки не работает. Должен ли я передать весь массив строк в swap?

#include <stdio.h>
#include <string.h>
void swap (char *s, char *t);
void main()
{
    char *name[10] = {"Noida","Lucknow","Kanpur","Mohali","Chandigarh","Mumbai","Kerala","Chennai","Bangalore","Indore"};
    char *temp;
    printf("The names are :\n");
    for(int i = 0; i < 10; i++)
    {
        printf("%s\n",name[i]);
    }
    printf("\nSORTING ALPHABETICALLY - \n\n");
    for (int i = 0; i < 10; i++)
    {
        for (int j = i + 1; j < 10; j++)
        {
            if(strcmp(name[i],name[j])>0)
                swap(name[i],name[j]);
        }
    }
    for(int i = 0; i < 10; i++)
    {
        printf("%s\n",name[i]);
    }
}
void swap (char *s, char *t) //Not swapping
{
    char *temp;
              temp = s;
              s = t;
              t = temp;
}

1 Ответ

4 голосов
/ 11 марта 2019

Вы передаете указатели копией. Функция работает со своими локальными переменными, которые являются копиями указателей на эти строки, а не указателями на переменные main. Таким образом, он может изменять строки, но не эти переменные (= значения этих указателей). Это должно исправить это:

void swap (char **s, char **t) 
{
    char *temp;
    temp = *s;
    *s = *t;
    *t = temp;
}

Редактировать: Как указано в комментарии ниже: Затем назовите это как swap(&name[i],&name[j]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...