Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту - C (СИ)
Формулировка задачи:
Хотел еще попросить помочь написать вот эту программу:
Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту.
Суть проблемы состоит в том, что моя программа не может сортировать по нормальному и выводит кучу мусора.
Спасибо.
Решение задачи: «Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define MAX_WORD_LEN 10
#define MAX_WORD_COUNT 10
int main()
{
char stroka[200],str[MAX_WORD_COUNT][MAX_WORD_LEN],word[MAX_WORD_LEN];
char *tmp;
int i=0,j=0,k;
printf("Enter string: ");
gets(stroka);
tmp=strtok(stroka,",");
while(tmp!=NULL)
{
strncpy(str[i], tmp, MAX_WORD_LEN); //запись каждой фамилии в массив
tmp=strtok(NULL,",");
i++;
}
//сортировка
for (j=0;j<i;j++)
{
for (k=0;k<i;k++)
{
if(strlen(str[k])<strlen(str[k+1]))
{
strcpy(word,str[k]);
strcpy(str[k],str[k+1]);
strcpy(str[k+1],word);
}
}
}
//вывод
for(j=0;j<i;j++)
printf("%s\n",str[j]);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создаются массивы для хранения фамилий и строка для ввода.
- Вводится строка с фамилиями через запятую.
- Фамилии разделяются на отдельные слова и сохраняются в массиве.
- Производится сортировка массива с фамилиями по алфавиту.
- Выводится отсортированный список фамилий. Пояснение к коду:
- В первой строке подключаются необходимые библиотеки.
- Определяются константы для ограничения длины фамилии и количества фамилий.
- В функции main() создаются переменные для хранения строки ввода, массива фамилий и указатель на текущую фамилию.
- С помощью функции printf() выводится приглашение для ввода строки.
- Введенная строка сохраняется в переменной stroka с помощью функции gets().
- Функция strtok() используется для разделения строки на отдельные слова и сохранения их в массиве str.
- В цикле while() происходит добавление каждой фамилии в массив.
- Далее происходит сортировка массива с помощью двух вложенных циклов for().
- Если текущая фамилия меньше следующей, то они меняются местами с помощью функций strcpy().
- После сортировки происходит вывод отсортированного списка фамилий с помощью цикла for() и функции printf().
- В конце функции main() возвращается 0, что означает успешное выполнение программы.