Advertisement
MaksNew

Untitled

Sep 27th, 2021
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <locale.h>
  4. #include <stdlib.h>
  5. #include <windows.h>
  6.  
  7. struct word{
  8.     int count;
  9.     char *word;
  10. };
  11.  
  12. int readInputString(char* str){
  13.     printf("%s\n", "Введите строку: ");
  14.     gets(str);
  15.     int str_size = 0;
  16.     for (int i = 0; i < strlen(str); i++)
  17.         if(str[i] == ' ')
  18.             str_size++;
  19.     ++str_size;
  20.     return str_size;
  21. }
  22.  
  23. void createArrayOfStrings(char* strings[], const char * str, int arrayOfStringsSize){
  24.     int stringSize = 0;
  25.     int j;
  26.     for(int i = 0; i < arrayOfStringsSize; i++){
  27.         strings[i] = malloc(0);
  28.         strings[i][0] = ' ';
  29.         for (j = 0; (str[stringSize] != ' ') && (str[stringSize] != '\0');){
  30.             if(((str[stringSize] > 'A'-1) && (str[stringSize] < 'Z'+1)) || ((str[stringSize] > 'a'-1) && (str[stringSize] < 'z'+1))){
  31.                 strings[i][j] = str[stringSize];
  32.                 j++;
  33.             }
  34.             ++stringSize;
  35.         }
  36.         strings[i][j+1] = '\0';
  37.         ++stringSize;
  38.     }
  39.     free(str);
  40. }
  41.  
  42. int createArrayOfWords(int arrayOfStringsSize, char* strings[]){
  43.     int size = 0;
  44.     for(int i = 0; i < arrayOfStringsSize; i++) {
  45.         if ((strcmp(strings[i], strings[arrayOfStringsSize-1]) != 0) && (strings[i][0] != ' '))
  46.             size++;
  47.     }
  48.     return size;
  49. }
  50.  
  51. void writeArrayOfWords(int arrayOfStringsSize, char* strings[], struct word *words, int *min){
  52.     int count;
  53.     char buf;
  54.     int buff = 0;
  55.     for(int i = 0; i < arrayOfStringsSize; i++) {
  56.         count = 1;
  57.         if ((strcmp(strings[i], strings[arrayOfStringsSize-1]) != 0) && (strings[i][0] != ' ')){
  58.             buf = strings[i][0];
  59.             if(strings[i][0] > 'Z') {
  60.                 strings[i][0] -= 32;
  61.             }
  62.             for(int j = 1; j < strlen(strings[i])-1; ++j) {
  63.                 if (strings[i][j] > 'Z') {
  64.                     {
  65.                         if ((strings[i][j-1] < 'Z'+1) && (strings[i][j - 1] < (strings[i][j] - 32)))
  66.                             count++;
  67.                         if ((strings[i][j-1] > 'Z') && (strings[i][j - 1] < strings[i][j]))
  68.                             count++;
  69.                     }
  70.                 } else {
  71.                     if ((strings[i][j - 1]  < 'Z'+1) && (strings[i][j - 1] < strings[i][j]))
  72.                         count++;
  73.                     if ((strings[i][j - 1]  > 'Z') && ((strings[i][j - 1]-32) < strings[i][j]))
  74.                         count++;
  75.                 }
  76.             }
  77.             strings[i][0] = buf;
  78.             if (count < *min)
  79.                 *min = count;
  80.             words[buff].word = malloc(0);
  81.             strcpy(words[buff].word, strings[i]);
  82.             words[buff].count = count;
  83.             buff++;
  84.         }
  85.     }
  86. }
  87.  
  88. void printWordsAlphabetTask(int arrayOfStringsSize, char* strings[]){
  89.     int min = 2000000000;
  90.     int size = createArrayOfWords(arrayOfStringsSize, strings);
  91.     struct word words[size];
  92.     writeArrayOfWords(arrayOfStringsSize, strings, words, &min);
  93.     puts("Задача с упорядочиванием по алфавиту:");
  94.     if(arrayOfStringsSize == 1)
  95.         puts("Строка состоит из одного слова! Оно и есть последнее!");
  96.     for (int i = 0; i < size; i++) //вывели слова
  97.         if(words[i].count == min) {
  98.             printf("%s ", words[i].word);
  99.         }
  100.     printf("\n");
  101. }
  102.  
  103. void printWordsReplacementTask(int arrayOfStringsSize, char* strings[]){
  104.     char setOfConsonants[22] = "bcdfghjklmnpqrstvwxyz";
  105.     puts("Задача с заменой букв:");
  106.     if(arrayOfStringsSize == 1)
  107.         puts("Строка состоит из одного слова! Оно и есть последнее!");
  108.     for(int i = 0; i < arrayOfStringsSize; i++) {
  109.         if (strcmp(strings[i], strings[arrayOfStringsSize-1]) != 0){
  110.             if(strlen(strings[i]) % 2 != 0)
  111.                 for(int j = 0; j < strlen(strings[i]); ++j){
  112.                     for(int k = 0; k < 22; ++k)
  113.                         if(strings[i][j] == setOfConsonants[k]) {
  114.                             strings[i][j] -= 32;
  115.                             break;
  116.                         }
  117.                 }
  118.             printf("%s ", strings[i]);
  119.         }
  120.     }
  121.     printf("\n");
  122. }
  123.  
  124. int readNum(){
  125.     int num;
  126.     int bool;
  127.     char* inputLine = malloc(0);
  128.     do{
  129.         puts("Введите номер задачи(1 - задача с упорядочиванием по алфавиту, либо 2 - задача с заменой букв): ");
  130.         bool = 0;
  131.         gets(inputLine);
  132.         num = atoi(inputLine);
  133.         if(num == 0){
  134.             bool = 1;
  135.             puts("Введите число! 1 или 2.");
  136.         }
  137.         if (!bool && (((num < 1) || (num > 2)))){
  138.             puts("Введите число! 1 или 2.");
  139.             bool = 1;
  140.         }
  141.     } while (bool);
  142.     return num;
  143. }
  144.  
  145. int main() {
  146.     SetConsoleCP(1251);
  147.     SetConsoleOutputCP(1251);
  148.     setlocale(LC_ALL, "Rus");
  149.     int arrayOfStringsSize;
  150.     char* str = malloc(0);
  151.     arrayOfStringsSize = readInputString(str);
  152.     char* strings[arrayOfStringsSize];
  153.     createArrayOfStrings(strings, str, arrayOfStringsSize);
  154.     printWordsAlphabetTask(arrayOfStringsSize, strings);
  155.     printWordsReplacementTask(arrayOfStringsSize, strings);
  156.     free(strings);
  157.     return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement