Сортировка массива слов по алфавиту (только по 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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек Код начинается с подключения двух необходимых библиотек: stdio.h и string.h.
  2. Объявление констант Затем определяются две константы: MAX_STR_LEN (максимальная длина строки в символах) и MAX_STR_CNT (максимальное количество строк).
  3. Объявление функции сравнения Далее идет объявление функции сравнения Compare. Эта функция будет использоваться в алгоритме сортировки для определения порядка строк.
  4. Ввод данных из файла В функции main открывается файл input.txt для чтения и записывается в него строки. Файл открывается в режиме текстового чтения (rt). Если файл не может быть открыт, программа выводит сообщение об ошибке и завершает работу.
  5. Сортировка массива После заполнения массива pSortArr сортировка происходит с помощью функции qsort. В качестве аргументов функции указывается начало и конец массива, а также функция сравнения Compare.
  6. Вывод отсортированных строк Затем в файл output.txt выводятся отсортированные строки.
  7. Завершение работы программы В конце программы закрывается файл output.txt и возвращается 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5