Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <malloc.h>
- #include <string.h>
- bool inMask(const char* word, const char* mask){ //функция проверяет, соответствует ли слово маске
- char symb;
- bool star = false;
- const char* pm = mask, *pw = word; //указатели на символ в слове и в маске
- while(*pm){
- symb = *pm; //смотрим новый символ
- if(symb == '*'){ //если звезда - ставим переключатель star в положение true
- star = true;
- symb = *(++pm); //и переходим к следующему символу в маске
- }
- if(star){ //если звезда
- if(symb == '\0') return true; //и следующего за ней символа в маске нет, то слово подходит, возвращаем true
- while(*pw != symb && *pw) ++pw; //бежим до следующего совпадающего по маске символа
- if(*pw == '\0') return false; //если дошли до конца слова и не нашли, значит слово не подходит, выходим
- }else{ //если не звезда, то смотрим на совпадение текущие символы в слове и в маске
- if(*pw != symb) return false; //если не совпадает - слово не подходит
- }
- ++pw;
- ++pm;
- star = false;
- }
- if(*pw != '\0') return false; //если дошли до конца маски, а слово не закончено - оно нам не подходит, выходим
- return true; //если дошли до конца слова и маски одновременно - клёво, у нас всё оk
- }
- char* NextWord(const char* text, int index){ //функция возвращает следующее слово по индексу
- while(index--){
- while(*text != ' ' && *text != '\0') ++text;//просто пропускаем пробелы в кол-ве индекса
- if(*text == '\0') return NULL; //если в процессе слово закончилось - возвращаем NULL
- ++text;
- }
- char* word = (char*)malloc(31); //выделяем память под слово
- char* pw = word;
- while(*text != ' ' && *text != '\0') //копируем слово в память
- *pw++ = *text++;
- *pw = '\0';
- return word;
- }
- int main(){
- char* text = (char*)malloc(255);
- char* mask = (char*)malloc(31);
- printf("Please, input text:\n");
- gets(text);
- printf("Please, input mask: ");
- gets(mask);
- int i = 0;
- char* word = NextWord(text, i++);
- while(word){
- if(inMask(word,mask)) printf("%s\n", word);
- word = NextWord(text,i++);
- }
- getch();
- }
Add Comment
Please, Sign In to add comment