daily pastebin goal
71%
SHARE
TWEET

Untitled

a guest Oct 12th, 2018 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. // Структура "слова"
  7. // str - указатель на начало слова
  8. // len - длинна
  9. typedef struct _word {
  10.   char *str;
  11.   unsigned int len;
  12. } word_t;
  13.  
  14. // Функция заполняет массив "слов" words
  15. // str - исходная строка
  16. // Возвращает количество элементов в массиве words
  17. // ВАЖНО!! words заполянется указателями на различные места в str.
  18. // При дальнейших манипуляциях с str нужно это учитывать.
  19. int get_words(char *str, word_t *words) {
  20.   char *p = str;
  21.  
  22.   int i = 0;
  23.   while(*p) {
  24.     // Отсечение начальных пробелов
  25.     while(isspace(*p)) {
  26.       p++;
  27.     }
  28.  
  29.     if(!*p) {
  30.       break;
  31.     }
  32.    
  33.     //cout << p << endl;  
  34.    
  35.     words[i].str = p;
  36.     int l = 0;
  37.  
  38.     while(!isspace(*p) && *p) {
  39.       p++;
  40.       l++;
  41.     }
  42.  
  43.     //cout << l << endl;
  44.     words[i].len = l;
  45.  
  46.     i++;
  47.  
  48.   }
  49.  
  50.   // Терминирование массива нулевым элементом
  51.   // на всякий случай.
  52.   words[i].str = NULL;
  53.   words[i].len = 0;
  54.  
  55.   return i;
  56. }
  57.  
  58. // Функция проверяет наличие 's' в слове w
  59. // Возвращает 1, если 's' найдена,
  60. // иначе - 0.
  61. int is_s (word_t w) {
  62.   int i = 0;
  63.   while (i < w.len) {
  64.     if (w.str[i] == 's') {
  65.       return 1;
  66.     }
  67.     i++;
  68.   }
  69.  
  70.   return 0;
  71. }
  72.  
  73. int main (void) {
  74.   // Исходная строка
  75.   char str[500];
  76.   cin.getline(str, sizeof(str));
  77.   cout << endl;
  78.  
  79.   // Массив под "слова"
  80.   word_t *words = new word_t[50];
  81.  
  82.   // Инициализация массива и
  83.   // получение кол-ва эллементов
  84.   int count_words = get_words(str, words);
  85.  
  86.   // В том случае, если второго слова нет
  87.   if(count_words < 2) {
  88.     delete words;
  89.     return 1;
  90.   }
  91.  
  92.   // Длинна второго слова
  93.   int len_two = words[1].len;
  94.  
  95.   //cout << endl;
  96.   //cout << "P_P " << count_words;
  97.   //cout << endl;
  98.  
  99.   for (int i = 0; i < count_words; i++) {
  100.    
  101.     // Сравниваем длинну i-ого слова с
  102.     // длинной второго
  103.     if ( words[i].len != len_two ) {
  104.       continue;
  105.     }
  106.  
  107.     //cout << "q_q ";
  108.  
  109.     // Проверяем, нет ли 's' в слове
  110.     // с помощью функции is_s(word_t)
  111.     if ( is_s(words[i]) ) {
  112.       continue;
  113.     }
  114.     //cout << "P_P" << endl;
  115.  
  116.     // Вывод на экран
  117.     cout.write(words[i].str, words[i].len);
  118.     cout << endl;
  119.   }
  120.  
  121.   // Освобождение памяти и точка возврата
  122.   delete words;
  123.   return 0;
  124. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top