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

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

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

Доброго времени суток! Попробовал реализовать такой код:
#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;
}
Проблема в том, что он не работает так как должен (он считает что любое слово в строке имеет нечередуемые гласные и согласные, т.е isAlt всегда false). В чем может быть проблема? В коде isAlt уверен, я его почти нетронутым взял тут же, работал он корректно. Может проблема в вводе? Подскажите пожалуйста.

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

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.

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


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

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

15   голосов , оценка 4.133 из 5
Похожие ответы