Сортировка массива слов по алфавиту (только по 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, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д