Qellex

6.2 - 18 в

Apr 27th, 2021 (edited)
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.73 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. // проверка на необх буквы в слове
  6. int proverka(char* prov, char* slovo) {
  7.     for (int i = 0; prov[i] != '\0'; i++) {
  8.         // проверяем все ли буквы есть в слове
  9.         if (!(strchr(slovo, prov[i]))) { // если данной буквы нет в слово, то возращает нуль и не добавляет его в рез
  10.             return 0;
  11.         }
  12.         // проверяем, что бы кол-во букв не превышало кол-во букв в другом слове
  13.         for (int i = 0; slovo[i] != '\0'; i++) {
  14.             int xi = 0;
  15.             for (int j = 0; slovo[j] != '\0'; j++) { // считаем кол-во вхождения буквы в слове
  16.                 if (slovo[i] == slovo[j])
  17.                     xi++;
  18.             }
  19.             int xj = 0;
  20.             for (int j = 0; prov[j] != '\0'; j++) { // считаем кол-во вхождений буквы в проверяемомо слове
  21.                 if (slovo[i] == prov[j])
  22.                     xj++;
  23.             }
  24.             if (xj > xi) // если в проверяемом больше, то нуль
  25.                 return 0;
  26.         }
  27.     } // если все хорошо возращает еденицу и добовляет слово рез
  28.     return 1;
  29. }
  30.  
  31. // поиск длины слова
  32. int dlina(char* str, int nach, char* net) {
  33.     int k = 0;
  34.     for (int i = 0; !(strrchr(net, str[nach + i])) && str[i] != '\0'; i++)
  35.         k++;
  36.     return k;
  37. }
  38.  
  39. void main() {
  40.  
  41.     SetConsoleCP(1251);     SetConsoleOutputCP(1251);
  42.  
  43.     char str[81], slovo[81]; // сама строка ввода и слово
  44.     char znak[7] = { ' ', '.' , ',' , ' ', '!' , '?' , '\0' }; // разделители
  45.     char prov[81]; // проверяемое слово
  46.     char rez[81] = " "; // результат
  47.     int dlin; // Длина слова
  48.  
  49.     printf("Введите слово: ");
  50.     fgets(slovo, 81, stdin);
  51.     slovo[strlen(slovo) - 1] = ' '; // замена \n на пробел
  52.     int dlin_slovo = strlen(slovo);
  53.     printf("Введите предложение: ");
  54.     fgets(str, 81, stdin);
  55.     str[strlen(str) - 1] = ' ';  // замена \n на пробел
  56.  
  57.     // запускаем цикл на строку
  58.     for (int i = 0; str[i] != '\0'; i++) {
  59.         if (!(strrchr(znak, str[i]))) {     // Ищем первую букву  
  60.  
  61.             dlin = dlina(str, i, znak);
  62.             strncpy_s(prov, 81, str + i, dlin); //Переменной prov присваиваем слово рассматриваеваемой длины
  63.             strcpy_s(str, 81, str + dlin + i); //Строку str перезаписываем без слова в переменной slovo(оно нам больше не пригодится,так как сравнится со всеми словами предложения)
  64.             i = -1;                            //Начинаем строку с нулевого элемента(нулевым элементом будет строка str,начинающая с dlin)
  65.  
  66.             if (proverka(prov, slovo) == 1 && dlin <= dlin_slovo) {  // отправляем в функцию на проверку необходимых букв в слове
  67.                 strcat_s(rez, prov);            // добавляем это слово в результат и добовляем пробел
  68.                 strcat_s(rez, " ");
  69.             }
  70.         }
  71.     }
  72.  
  73.     printf("Из слова %sсоставлены следующие слова из введенного предложения:%s", slovo, rez);
  74.  
  75. }
Add Comment
Please, Sign In to add comment