Guest User

Untitled

a guest
Oct 12th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  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. }
Add Comment
Please, Sign In to add comment