Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <stdio.h>
- using namespace std;
- const int SIZE =80;
- void form (char*, char*); //это прототип функции form (говорит, что функция ничего не возвращает - void, но принимает 2 параметра - 2 указателя на char), его надо обязательно написать до использования самой функции
- void main()
- {
- char buf[SIZE], outbuf[SIZE]={' '}; //2 массива: один входные данные, что введены с клавиатуры (у вас из файла), второй. чтобы было куда поместить найденные слова
- while(cout<<"Vvedite stroky: ",
- cin.getline(buf, SIZE))
- {
- form (buf, outbuf); //вызов функции form (передаем 2 указателя на 2 массива)
- cout<<"Rez: ";
- cout<<outbuf; //печать результата
- cout<<endl<<endl;
- }
- }
- void form (char *a,char *out) //описание функции form (функция получает 2 параметра: два указателя на 1-е элементы переданных в нее массивов, а именно на buf и outbuf (см main) просто в самой функции они названы a и out)
- {
- char *first=a, *end=a; //обыявляем два указателя на char и присваиваем и значение а, т. е. первый элемент массива buf
- *out='\0'; // out - это указатель на 1-й элемент outbuf, а outbuf пустой, мы ему присваиваем 0 байт,т.е. конец строки
- int k=0, flag=false, flag2=false; //создается два флага
- char b[]={"AEIUOYaeiuoy"};
- while (*first!='\0') //в конце символьной строки записывается всегда 0 байт - это признак конца строки, так вот, пока указатель *first не будет равен 0 байт, т.е пока не конец строки (это еще можно записать, как while(*first) - значит тоже самое)
- {
- flag=false; flag2=false; //флагам устанавливаем ложь (если это не сделать, то как только программа найдет первое подходящее слово, запишет его и задаст флагам истину, если их не обнулить, все остальные слова будет подходить по заданным ниже критериям) обнуляем для каждого слова
- while (*first==' '&&*first!='\0') //цикл, пока ук-ль *first равен пробелу и не равен концу строки (если равен концу строки,и считать нечего))
- first++; //сдвигаем адрес указателя на 1позицию, на 1 символ
- //теперь *first у нас стоит на следующем сомволе после пробелов - первая буква слова
- end=first; //адресу end присваиваем адрес first, ставим end на ту же букву
- while (*end!=' '&&*end) //пока *end не равен пробелу и концу файла
- end++; //двигаем указатель end
- //теперь end стоит на первом пробеле! после пройденного слова
- for (int i=0; i<12; i++) //проверяем равна ли первая буква элементу массива
- if (*first==b[i])
- {
- flag=true; //если да, флаг - истина
- break; //заканчиваем цикл - зачем нам сравнивать дальше
- }
- for (int i=0; i<12; i++) //проверяем равна ли пследняя буква элементу массива *(end-1) - эти последняя буква (указатель на (end-1 позиция), т.к end - указатель на первый пробел после слова
- if (*(end-1)==b[i])
- {
- flag2=true; //все как в предидущем цикле
- break;
- }
- if (flag==true&&flag2==true) //если оба флага истинны ( и 1-я и последняя буквы есть в массиве)
- {
- while (first!=end) //пока адрес первой буквы не равен первого пробела после слова
- *out++=*first++; //в массив out записывается содержимое массива buf, на который указывает *first (++ сдвигаем оба указателя на 1 позицию)
- *out++=' '; //как только скопировали слово, ставим после него пробел
- *out='\0'; //присваиваем конец файла
- //во время этих манипуляций указатель на первую букву пройдет до первого после слова пробела
- }
- else first=end; //если слово не подходит, просто присваиваем указателю на первую букву адрес первого после слова пробела и цикл продолэается...
- }
Add Comment
Please, Sign In to add comment