Напечатать слова в алфавитном порядке - C (СИ) (71364)
Формулировка задачи:
Дана строка, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами – запятая, за последним словом – точка. Напечатать:
Все слова в алфавитном порядке
Если кто знает, как делать, буду рад оказанной помощи, у меня получилось разбить слова и записать их в массив, а как сортировку сделать не могу представить, а также надо сортировку сделать при помощи указателей, я никак с ними разобраться не могу, вот есть наработки, если кто знает напишите
#include "stdafx.h" #include "string.h" #include "stdio.h" int _tmain(int argc, _TCHAR* argv[]) { char s[100] = {"fesa,tre,qwrp,kjfo,aks,ptfgdr,odjhf,bckjd,abgfs.\n"}; char b[100][100]; char *str[100]; int i, j, n = 30, r, l, kol = 0; char *raz; puts(s); //gets(s); printf( "Razbit:\n" ); raz = strtok(s, ".,"); while( raz != NULL ) { printf("%s \n", raz); raz = strtok(NULL, ".,"); kol++; } /*перенос слов в новый массив для сравнения*/ for (int j = 0, z = 0; j < kol; j++) { for (int i = z, l = 0; s[i] != '\0' ; i++, l++) { b[j][l] = s[i]; b[j][l + 1] = '\0'; z++; } z++; } //сортировка по алфавиту, но не верная, она не работает for(j = 0;j < n; j++) { r = 0; for(l = 0;l < n;l++) { if (strcmp(b[j],b[l])>0) { r++; } if(l < j && strcmp(b[j],b[l])==0) r++; } str[r] = b[j]; } for(j = 0;j < n; j++) { printf("%s\n",str[r]); } return 0; }
Решение задачи: «Напечатать слова в алфавитном порядке»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp(const void * a, const void * b) { return strcmp(*(char**)b, *(char**)a); } typedef char string_t[256]; #define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 ) #define MAX_WORDS (256) #define DELIM " ,\t\n" int main(void) { string_t str; while ( printf("String: ") && get_string(str) ) { char * words[MAX_WORDS], * p = strchr(str, '.'); int count = 0; if ( p ) *p = '\0'; for ( p = strtok(str, DELIM); p && count < MAX_WORDS; p = strtok(NULL, DELIM) ) words[count++] = p; qsort(words, count, sizeof(char*), cmp); while ( count ) printf("%s\n", words[--count]); } return 0; }
Объяснение кода листинга программы
В этом коде на языке C:
- Написаны функции:
cmp
: функция сравнения, используемая в функцииqsort
для сортировки массива строк.get_string
: функция, которая считывает строку из стандартного ввода до первого символа новой строки, оставляя все символы новой строки в строке.main
: точка входа в программу.
- Определены типы данных и переменные:
string_t
: пользовательский тип данных, представляющий строку символов.MAX_WORDS
: максимальное количество слов в строке.DELIM
: строка, используемая для разделения слов в строке.str
: переменная типаstring_t
, которая считывается вводной функциейget_string
.words[i]
: массив указателей на строки, которые считываются изstr
.count
: счетчик количества слов в строке.p
: указатель на текущее слово в строке.
- Происходит последовательность действий:
- Сначала пользователю предлагается ввести строку.
- Если строка была введена, то код разбивает строку на слова и сортирует их в алфавитном порядке с помощью функции
qsort
и функции сравненияcmp
. - Затем код выводит отсортированные слова в обратном порядке.
- Используются директивы препроцессора и библиотеки:
#include <stdio.h>
: подключает библиотеку для ввода/вывода.#include <stdlib.h>
: подключает библиотеку для работы с памятью.#include <string.h>
: подключает библиотеку для работы со строками.#define MAX_WORDS 256
: определяет максимальное количество слов в строке.#define DELIM
,\t\n``: определяет строку, используемую для разделения слов в строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д