Advertisement
MaksNew

Untitled

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