Нахождение слов, в которых чередуются гласные с согласными - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Попробовал реализовать такой код:
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. bool isAlt(char *pstr);
  5. void Function(char*str);
  6. int main()
  7. {
  8. char str[255];
  9. gets_s(str);
  10. Function(str);
  11. system("pause");
  12. return 0;
  13. }
  14. void Function(char*str) {
  15. char* word = strtok(str, " ,.-"); //Достаем из массива символов первое слово
  16. while (word)// пока есть лексемы
  17. {
  18. if (isAlt(word))//Выводит текущее слово, если isAlternate true
  19. std::cout << word << "\n";
  20. word = strtok(NULL, " ,.-");//Достаем слово из начала
  21. }
  22. delete[] word;
  23. }
  24. bool isAlt(char*pstr) {
  25. const char CChars[] = "aeiouy";
  26. bool isAlternate = (*pstr != '\n');
  27. bool previos = strchr(CChars, *pstr);
  28. bool current;
  29. for (++pstr; isAlternate && (*pstr != '\n'); ++pstr)
  30. {
  31. current = strchr(CChars, *pstr);
  32. isAlternate = (current != previos);
  33. previos = current;
  34. }
  35. return isAlternate;
  36. }
Проблема в том, что он не работает так как должен (он считает что любое слово в строке имеет нечередуемые гласные и согласные, т.е isAlt всегда false). В чем может быть проблема? В коде isAlt уверен, я его почти нетронутым взял тут же, работал он корректно. Может проблема в вводе? Подскажите пожалуйста.

Решение задачи: «Нахождение слов, в которых чередуются гласные с согласными»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int isAlt(const char* s){
  5.     int i, j;
  6.     const char chs[] = "aeiouyAEIOUY";
  7.    
  8.     i = (strchr(chs, *s) == NULL);
  9.     if(*s)
  10.         ++s;
  11.  
  12.     for(; *s; ++s){
  13.         j = (strchr(chs, *s) == NULL);
  14.         if(i == j)
  15.             return 0;
  16.         i = j;
  17.     }
  18.     return 1;
  19. }
  20.  
  21. int main(void) {
  22.     char* p;
  23.     char  s[] = "SUZUKI, HONDA, YHAMAHA, BIMOTA, KAWASAKI";
  24.  
  25.     p = strtok(s, " \n\t.,");
  26.     for(; p != NULL; p = strtok(NULL, " \n\t.,")){
  27.         if(isAlt(p))
  28.             puts(p);
  29.     }
  30.     return 0;
  31. }

Объяснение кода листинга программы

В данном коде реализована функция isAlt, которая принимает в качестве аргумента указатель на строку и возвращает 1, если в этой строке чередуются гласные и согласные, и 0 в противном случае. В функции main создаётся массив строк s, содержащий названия мотоциклов. Затем с помощью функции strtok этот массив разбивается на отдельные строки (мотоциклы), которые проверяются на чередующийся характер гласных и согласных с помощью функции isAlt. Если строка удовлетворяет условию, она выводится на экран с помощью функции puts.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы