Нахождение слов, в которых чередуются гласные с согласными - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д