Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string.h>
- using namespace std;
- // Структура "слова"
- // str - указатель на начало слова
- // len - длинна
- typedef struct _word {
- char *str;
- unsigned int len;
- } word_t;
- // Функция заполняет массив "слов" words
- // str - исходная строка
- // Возвращает количество элементов в массиве words
- // ВАЖНО!! words заполянется указателями на различные места в str.
- // При дальнейших манипуляциях с str нужно это учитывать.
- int get_words(char *str, word_t *words) {
- char *p = str;
- int i = 0;
- while(*p) {
- // Отсечение начальных пробелов
- while(isspace(*p)) {
- p++;
- }
- if(!*p) {
- break;
- }
- //cout << p << endl;
- words[i].str = p;
- int l = 0;
- while(!isspace(*p) && *p) {
- p++;
- l++;
- }
- //cout << l << endl;
- words[i].len = l;
- i++;
- }
- // Терминирование массива нулевым элементом
- // на всякий случай.
- words[i].str = NULL;
- words[i].len = 0;
- return i;
- }
- // Функция проверяет наличие 's' в слове w
- // Возвращает 1, если 's' найдена,
- // иначе - 0.
- int is_s (word_t w) {
- int i = 0;
- while (i < w.len) {
- if (w.str[i] == 's') {
- return 1;
- }
- i++;
- }
- return 0;
- }
- int main (void) {
- // Исходная строка
- char str[500];
- cin.getline(str, sizeof(str));
- cout << endl;
- // Массив под "слова"
- word_t *words = new word_t[50];
- // Инициализация массива и
- // получение кол-ва эллементов
- int count_words = get_words(str, words);
- // В том случае, если второго слова нет
- if(count_words < 2) {
- delete words;
- return 1;
- }
- // Длинна второго слова
- int len_two = words[1].len;
- //cout << endl;
- //cout << "P_P " << count_words;
- //cout << endl;
- for (int i = 0; i < count_words; i++) {
- // Сравниваем длинну i-ого слова с
- // длинной второго
- if ( words[i].len != len_two ) {
- continue;
- }
- //cout << "q_q ";
- // Проверяем, нет ли 's' в слове
- // с помощью функции is_s(word_t)
- if ( is_s(words[i]) ) {
- continue;
- }
- //cout << "P_P" << endl;
- // Вывод на экран
- cout.write(words[i].str, words[i].len);
- cout << endl;
- }
- // Освобождение памяти и точка возврата
- delete words;
- return 0;
- }
Add Comment
Please, Sign In to add comment