Guest User

Untitled

a guest
Nov 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5.  
  6. bool inMask(const char* word, const char* mask){    //функция проверяет, соответствует ли слово маске
  7.     char symb;
  8.     bool star = false;
  9.     const char* pm = mask, *pw = word;              //указатели на символ в слове и в маске
  10.  
  11.     while(*pm){
  12.         symb = *pm;                                 //смотрим новый символ
  13.         if(symb == '*'){                            //если звезда - ставим переключатель star в положение true
  14.             star = true;
  15.             symb = *(++pm);                         //и переходим к следующему символу в маске
  16.         }
  17.         if(star){                                   //если звезда
  18.             if(symb == '\0') return true;           //и следующего за ней символа в маске нет, то слово подходит, возвращаем true
  19.             while(*pw != symb && *pw) ++pw;         //бежим до следующего совпадающего по маске символа
  20.             if(*pw == '\0') return false;           //если дошли до конца слова и не нашли, значит слово не подходит, выходим
  21.         }else{                                      //если не звезда, то смотрим на совпадение текущие символы в слове и в маске
  22.             if(*pw != symb) return false;           //если не совпадает - слово не подходит
  23.         }
  24.         ++pw;
  25.         ++pm;
  26.         star = false;
  27.     }
  28.     if(*pw != '\0') return false;                   //если дошли до конца маски, а слово не закончено - оно нам не подходит, выходим
  29.     return true;                                    //если дошли до конца слова и маски одновременно - клёво, у нас всё оk
  30. }
  31.  
  32. char* NextWord(const char* text, int index){        //функция возвращает следующее слово по индексу
  33.     while(index--){
  34.         while(*text != ' ' && *text != '\0') ++text;//просто пропускаем пробелы в кол-ве индекса
  35.         if(*text == '\0') return NULL;              //если в процессе слово закончилось - возвращаем NULL
  36.         ++text;
  37.     }
  38.     char* word = (char*)malloc(31);                 //выделяем память под слово
  39.     char* pw = word;
  40.     while(*text != ' ' && *text != '\0')            //копируем слово в память
  41.         *pw++ = *text++;
  42.     *pw = '\0';
  43.     return word;
  44. }
  45.  
  46.  
  47. int main(){
  48.     char* text = (char*)malloc(255);
  49.     char* mask = (char*)malloc(31);
  50.  
  51.     printf("Please, input text:\n");
  52.     gets(text);
  53.  
  54.     printf("Please, input mask: ");
  55.     gets(mask);
  56.  
  57.     int i = 0;
  58.     char* word = NextWord(text, i++);
  59.     while(word){
  60.         if(inMask(word,mask)) printf("%s\n", word);
  61.         word = NextWord(text,i++);
  62.     }
  63.  
  64.     getch();
  65. }
Add Comment
Please, Sign In to add comment