Задать вопрос
nkorobkov
@nkorobkov

Как отсортировать строки в алфавитном порядке в СИ?

Вот задание, которое я делаю:
4d014b388a49499189ffb1599fb30ef5.png
Вот программа, которую я написал на данный момент:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct price{
    char name[30];
    char shop[30];
    char product_price[10];
};
int main(){
    struct price product[8];
    char check[30];
    int i, compare_limit = 30;
    char memory[30];

    //Ввод информации в структуру с товарами
    for( i = 0; i < 2; i++ ){
        printf("Enter product %d NAME:\n", i);
        fgets( product[i].name, 30, stdin );
        /*printf("Enter product %d SHOP:\n", i);
        fgets( product[i].shop, 30, stdin );
        printf("Enter product %d PRICE:\n", i);
        fgets( product[i].product_price, 10, stdin );*/
    }

    for( i = 0; i < 2; i++){
        if(product[i+1].name > product[i].name){
            strcpy(memory, product[i].name);
            strcpy(product[i].name, product[i+1].name);
            strcpy(product[i+1].name, memory);
        }
    }

    for( i = 0; i < 2; i++ ){
        printf("%s\n", product[i].name);
    }

    //Вывод информации о товаре по его имени
    while ( 1 ){
        printf("You can get information about any product by enter it's name:\n");
        fgets( check, 30, stdin );
        for( i = 0; i < 2; i++ ){
            if( strncmp(check, product[i].name, compare_limit) == 0 ){
                printf("Product %d NAME is: %s", i, product[i].name);
                printf("Product %d SHOP is: %s", i, product[i].shop);
                printf("Product %d PRICE is: %s", i, product[i].product_price);
            }
        }
    }
    return 0;
}

Вроде-бы я всё реализовал (скорее всего не очень грамотно), кроме сортировки записей в алфавитном порядке. Я не знаю, правильно ли я сравниваю строки и какой принцип сравнения у них вообще (А > a, б < а, Б > a)... подскажите пожалуйста, как всё это работает и как мне отсортировать строки?
  • Вопрос задан
  • 6380 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 2
Нужно воспользоваться qsort.
Функция сравнения:
int compare_prices(const void* price1, const void* price2) {
    const char* name1 = ((const price*)price1)->name;
    const char* name2 = ((const price*)price2)->name;
    return strcmp(name1, name2);
}

Вызов qsort:
qsort(МАССИВ_СТРУКТУР, РАЗМЕР_МАССИВА, sizeof(price), &compare_prices);
Ответ написан
Комментировать
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Приводите сравниваемые строки к одному кейсу и сравнивайте так же через strcmp.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы