Сортировка массива слов по алфавиту (только по 4-му и 5-му символу) - C (СИ)
Формулировка задачи:
Есть два файла, input.txt, в котором в столбик записано некоторое количество слов, и output.txt, в который необходимы вывести эти же слова после сортировки+колонка из 4-го и 5-го символов.
Как упорядочить слова по алфавиту относительно 4-го и 5-го символов и вывести на консоль полученный текст и колонку из соответствующих словам пар символов? Смог осилить(не без гугла) только сортировку по алфавиту(по всему слову) и чтение из файла/вывод в файл.
Вот код:
Листинг программы
- #include <stdio.h>
- #include <string.h>
- int main(void)
- {
- char strings[10][32], str[32];
- FILE *inputFile, *outputFile;
- int count = 0, i, j;
- if((inputFile = fopen ("input.txt", "r")) == NULL)
- {
- printf("Ошибка чтения файла!\n");
- return 1;
- }
- if((outputFile = fopen ("output.txt", "w")) == NULL)
- {
- printf("Ошибка записи в файл!\n");
- return 1;
- }
- /* Считываем слова из файла */
- while (feof(inputFile) == 0 || count > 10)
- {
- fscanf (inputFile, "%s", str);
- strcpy(strings[count++], str);
- }
- fclose(inputFile);
- /* Выводим считаные строки */
- printf("Исходный текст:\n");
- for(i = 0; i < count-1; i++)
- {
- printf("%s\n", strings[i]);
- }
- putchar('\n');
- /* Сортировка методом пузырька */
- for(i = 1; i < count; i++)
- {
- for(j = 0; j < count - i; j++)
- {
- if(strcmp(strings[j], strings[j+1]) > 0)
- {
- strcpy(str, strings[j]);
- strcpy(strings[j], strings[j+1]);
- strcpy(strings[j+1], str);
- }
- }
- }
- /* Выводим отсортированные строки */
- printf("Сортированный по алфавиту текст:\n");
- fprintf(outputFile, "Сортированный по алфавиту текст:\n");
- for(i = 0; i < count-1; i++)
- {
- printf("%s\n", strings[i]);
- fprintf(outputFile, "%s\n", strings[i]);
- }
- return 0;
- }
Решение задачи: «Сортировка массива слов по алфавиту (только по 4-му и 5-му символу)»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #define MAX_STR_LEN (32 + 1)
- #define MAX_STR_CNT (10)
- static int Compare(void* p1,void* p2)
- {
- char* psz1 = *(char**)p1;
- char* psz2 = *(char**)p2;
- if (psz1[3] > psz2[3])
- {
- return 1;
- }
- else if (psz1[3] < psz2[3])
- {
- return -1;
- }
- else
- {
- if (psz1[4] > psz2[4])
- {
- return 1;
- }
- else if (psz1[4] < psz2[4])
- {
- return -1;
- }
- else
- {
- return 0;
- }
- }
- }
- int main(int argc,char** argv)
- {
- char pszTemp[MAX_STR_LEN];
- char pszInput[MAX_STR_CNT][MAX_STR_LEN];
- char* pSortArr[MAX_STR_CNT];
- FILE* pIn = fopen("input.txt", "rt");
- FILE* pOut = fopen("output.txt","wt");
- int count = 0;
- int ii = 0;
- if (!pIn)
- {
- printf("Ошибка чтения файла!\n");
- return -1;
- }
- if (!pOut)
- {
- printf("Ошибка записи в файл!\n");
- fclose(pIn);
- return -1;
- }
- /* Считываем слова из файла */
- while (!feof(pIn) && (count < 10))
- {
- fscanf(pIn,"%s",pszTemp);
- strcpy(pszInput[count],pszTemp);
- pSortArr[count] = pszInput[count];
- ++count;
- }
- fclose(pIn);
- pIn = NULL;
- /* Выводим считаные строки */
- printf("Исходный текст:\n");
- for(ii = 0; ii < count; ++ii)
- {
- printf("%s\n",pszInput[ii]);
- }
- putchar('\n');
- qsort(pSortArr,count,sizeof(char*),Compare);
- /* Выводим отсортированные строки */
- fprintf(pOut,"Сортированный по алфавиту (символы 4 и 5) текст:\n\n");
- for ( ii = 0; ii < count; ++ii)
- {
- fprintf(pOut,"%s\n",pSortArr[ii]);
- }
- return 0;
- }
Объяснение кода листинга программы
- Подключение необходимых библиотек Код начинается с подключения двух необходимых библиотек: stdio.h и string.h.
- Объявление констант Затем определяются две константы: MAX_STR_LEN (максимальная длина строки в символах) и MAX_STR_CNT (максимальное количество строк).
- Объявление функции сравнения Далее идет объявление функции сравнения Compare. Эта функция будет использоваться в алгоритме сортировки для определения порядка строк.
- Ввод данных из файла В функции main открывается файл input.txt для чтения и записывается в него строки. Файл открывается в режиме текстового чтения (rt). Если файл не может быть открыт, программа выводит сообщение об ошибке и завершает работу.
- Сортировка массива После заполнения массива pSortArr сортировка происходит с помощью функции qsort. В качестве аргументов функции указывается начало и конец массива, а также функция сравнения Compare.
- Вывод отсортированных строк Затем в файл output.txt выводятся отсортированные строки.
- Завершение работы программы В конце программы закрывается файл output.txt и возвращается 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д