n0throw

option 19

Nov 25th, 2020
466
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define OS OSX
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <ctype.h>
  6.  
  7. #if OS == OSX
  8.     #include <malloc/malloc.h>
  9. #elif OS == WIN
  10.     #include <malloc.h>
  11. #endif
  12.  
  13. #define TRUE 1
  14. #define FALSE 0
  15.  
  16. #define WORDCOUNT 32
  17. #define STRLEN 1024
  18.  
  19. // Путь до файла
  20. #define PATH "/Users/NOTHROW/Library/Developer/Xcode/DerivedData/TestProg-gjnugwfsqmuwybapjkkipdjhkzkr/Build/Products/Debug/"
  21.  
  22.  
  23. void editStr(char*, char**);
  24.  
  25. int main(int argc, char* argv[])
  26. {
  27.     char action;
  28.    
  29.     char *inputFileName = (char*)malloc(WORDCOUNT * sizeof(char));
  30.     char *outputFileName = (char*)malloc(WORDCOUNT * sizeof(char));
  31.     char *inputFilePath = (char*)malloc(STRLEN * sizeof(char));
  32.     char *outputFilePath = (char*)malloc(STRLEN * sizeof(char));
  33.     memset(inputFileName, 0, WORDCOUNT * sizeof(char));
  34.     memset(outputFileName, 0, WORDCOUNT * sizeof(char));
  35.     memset(inputFilePath, 0, STRLEN * sizeof(char));
  36.     memset(outputFilePath, 0, STRLEN * sizeof(char));
  37.     strcpy(inputFilePath, PATH);
  38.     strcpy(outputFilePath, PATH);
  39.    
  40.    
  41.     do
  42.     {
  43.         printf("Использовать стандартное название исходного файла(InputFile.txt)? (Y/N):\t");
  44.         scanf("%c", &action);
  45.         action = toupper(action);
  46.         if (action == 'Y' || action == 'N')
  47.         {
  48.             if (action == 'Y')
  49.                 inputFileName = "InputFile.txt";
  50.             else
  51.             {
  52.                 printf("Название файла:\t");
  53.                 scanf("%s", inputFileName);
  54.             }
  55.             strcat(inputFilePath, inputFileName);
  56.             break;
  57.         }
  58.     } while (TRUE);
  59.    
  60.     do
  61.     {
  62.         printf("Использовать стандартное название итогового файла(OutputFile.txt)? (Y/N):\t");
  63.         scanf("%c", &action);
  64.         action = toupper(action);
  65.         if (action == 'Y' || action == 'N')
  66.         {
  67.             if (action == 'Y')
  68.                 outputFileName = "OutputFile.txt";
  69.             else
  70.             {
  71.                 printf("Название файла:\t");
  72.                 scanf("%s", outputFileName);
  73.             }
  74.            
  75.             strcat(outputFilePath, outputFileName);
  76.             break;
  77.         }
  78.     } while (TRUE);
  79.    
  80.    
  81.    
  82.     FILE * file = fopen(inputFilePath, "r");
  83.     free(inputFilePath);
  84.     char **str = (char**)malloc(sizeof(char*));
  85.     int numberSrcLines = 0;
  86.     while (!feof(file))
  87.     {
  88.         str[numberSrcLines] = (char*)malloc(STRLEN * sizeof(char));
  89.         memset(str[numberSrcLines], 0, STRLEN * sizeof(char));
  90.         fgets(str[numberSrcLines], STRLEN, file);
  91.         numberSrcLines++;
  92.         str = (char**)realloc(str, (numberSrcLines + 1) * sizeof(char*));
  93.     }
  94.     fclose(file);
  95.    
  96.    
  97.     FILE * fileOutput = fopen(outputFilePath, "w");
  98.     free(outputFilePath);
  99.     char *out;
  100.     for (int i = 0; i < numberSrcLines; i++)
  101.     {
  102.         out = (char*)malloc(STRLEN * sizeof(char));
  103.         memset(out, 0, STRLEN * sizeof(char));
  104.         editStr(str[i], &out);
  105.         fputs(out, fileOutput);
  106.         free(out);
  107.     }
  108.     fclose(fileOutput);
  109.     return 0;
  110. }
  111.  
  112. // так как out (из метода main) - это указатель, то при объявлении метода
  113. // editStr(char *str, char **out) мы выставляем указатель на указатель, иначе
  114. // была бы копия out (из метода main)
  115. void editStr(char *str, char **out)
  116. {
  117.     char **res = (char**)malloc(STRLEN * sizeof(char));
  118.     for (int j = 0; j < STRLEN; j++)
  119.     {
  120.         res[j] = (char*)malloc(WORDCOUNT * sizeof(char));
  121.         memset(res[j], 0, WORDCOUNT * sizeof(char));
  122.     }
  123.    
  124.    
  125.     int j = 0, k = 0, isNewWord = TRUE;
  126.     for (int x = 0; x <= STRLEN; x++)
  127.     {
  128.         if (str[x] == '\n')
  129.             continue;
  130.         if (str[x] == ' ')
  131.         {
  132.             if (isNewWord)
  133.                 continue;
  134.             isNewWord = TRUE;
  135.             k++;
  136.             j = 0;
  137.         }
  138.         else
  139.         {
  140.             res[k][j++] = str[x];
  141.             isNewWord = FALSE;
  142.         }
  143.     }
  144.  
  145.     int wordlen = 0;
  146.     int isSuitable = TRUE;
  147.     for (int j = 0; j <= k; j++)
  148.     {
  149.         if (j == 0)
  150.             wordlen = strlen(res[j]);
  151.         else if (wordlen != strlen(res[j]))
  152.         {
  153.             isSuitable = FALSE;
  154.             break;
  155.         }
  156.     }
  157.    
  158.     if (isSuitable)
  159.     {
  160.         strcat(*out, "!");
  161.         strcat(*out, str);
  162.     }
  163.     else
  164.         strcat(*out, str);
  165.    
  166.     return;
  167. }
  168.  
RAW Paste Data