Нахождение слов, в которых чередуются гласные с согласными - C (СИ)
Формулировка задачи:
Доброго времени суток!
Попробовал реализовать такой код:
Проблема в том, что он не работает так как должен (он считает что любое слово в строке имеет нечередуемые гласные и согласные, т.е isAlt всегда false). В чем может быть проблема? В коде isAlt уверен, я его почти нетронутым взял тут же, работал он корректно. Может проблема в вводе? Подскажите пожалуйста.
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> bool isAlt(char *pstr); void Function(char*str); int main() { char str[255]; gets_s(str); Function(str); system("pause"); return 0; } void Function(char*str) { char* word = strtok(str, " ,.-"); //Достаем из массива символов первое слово while (word)// пока есть лексемы { if (isAlt(word))//Выводит текущее слово, если isAlternate true std::cout << word << "\n"; word = strtok(NULL, " ,.-");//Достаем слово из начала } delete[] word; } bool isAlt(char*pstr) { const char CChars[] = "aeiouy"; bool isAlternate = (*pstr != '\n'); bool previos = strchr(CChars, *pstr); bool current; for (++pstr; isAlternate && (*pstr != '\n'); ++pstr) { current = strchr(CChars, *pstr); isAlternate = (current != previos); previos = current; } return isAlternate; }
Решение задачи: «Нахождение слов, в которых чередуются гласные с согласными»
textual
Листинг программы
#include <stdio.h> #include <string.h> int isAlt(const char* s){ int i, j; const char chs[] = "aeiouyAEIOUY"; i = (strchr(chs, *s) == NULL); if(*s) ++s; for(; *s; ++s){ j = (strchr(chs, *s) == NULL); if(i == j) return 0; i = j; } return 1; } int main(void) { char* p; char s[] = "SUZUKI, HONDA, YHAMAHA, BIMOTA, KAWASAKI"; p = strtok(s, " \n\t.,"); for(; p != NULL; p = strtok(NULL, " \n\t.,")){ if(isAlt(p)) puts(p); } return 0; }
Объяснение кода листинга программы
В данном коде реализована функция isAlt
, которая принимает в качестве аргумента указатель на строку и возвращает 1, если в этой строке чередуются гласные и согласные, и 0 в противном случае.
В функции main
создаётся массив строк s
, содержащий названия мотоциклов. Затем с помощью функции strtok
этот массив разбивается на отдельные строки (мотоциклы), которые проверяются на чередующийся характер гласных и согласных с помощью функции isAlt
. Если строка удовлетворяет условию, она выводится на экран с помощью функции puts
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д