Подсчитайте гласные в каждой из строк, используя двумерный массив

Мне нужно написать программу, в которой пользователь вводит количество строк, а программа подсчитывает количество гласных в каждой строке и печатает общее количество гласных. Следующий код работает с двумерным массивом без

int countVoweles(char inputArray[])
{
    int total = 0;
    char vowels[] = "aAeEiIoOuU";
    for (int i = 0; inputArray[i]; i++)
    {
        for (int j = 0; vowels[j]; j++)
        {
            if (inputArray[i] == vowels[j])
            {
                total++;
            }
        }
    }
    return total;
}

Однако следующий код не работает с двумерным массивом с. Он печатает гласные только из первой строки.

Как я могу напечатать гласные из всех введенных строк?

char name[3][10];
    int total = 0;
    char vowels[] = "aAeEiIoOuU";
    printf("Enter your string :");
    for (int i = 0; i < 3; i++)
    {
        gets(name[i]);
    }
    printf("The total number of vowels are :\n");
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; name[i][j]; j++)
        {
            if (name[i][j] == vowels[i])
            {
                total++;
            }
        }
    }
    printf("%d", total);
if (name[i][j] == vowels[i]) смысла нет. i не является правильным индексом в массиве vowels. Вам нужен третий цикл с третьим индексом, чтобы пройтись по массиву vowels.
user3386109 17.05.2022 21:27
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
1
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для начала обратите внимание, что функция gets небезопасна и не поддерживается стандартом C. Вместо этого используйте стандартную функцию fgets, например

fgets( name[i], sizeof( name[i] ), stdin );

Что касается вашей проблемы, то вам нужен еще один цикл для обхода массива с помощью vowels для заданного символа в строках массива name.

Например

for (int i = 0; i < 3; i++)
{
    for (int j = 0; name[i][j]; j++)
    {
        int k = 0;
        while ( vowels[k] && name[i][j] != vowels[k] ) ++k;
        if ( vowels[k] )
        {
            total++;
        }
    }
}

Другой подход заключается в использовании вашей уже написанной функции, например

for (int i = 0; i < 3; i++)
{
    total += countVoweles( name[i] );
}

Вместо использования цикла для обхода массива vowels вы можете использовать стандартную функцию C strchr, объявленную в заголовке <string.h>, например

for (int i = 0; i < 3; i++)
{
    for (int j = 0; name[i][j]; j++)
    {
        total += strchr( vowels, name[i][j] ) != NULL;
    }
}

Большое спасибо за дальнейшее объяснение. Вы очень полезны. Нам нужно больше таких людей, как вы в этом мире :)

familyGuy 17.05.2022 21:43

Ваша функция должна знать, каков размер массива 2D-символов.

size_t countVoweles(size_t lines, size_t chars, char inputArray[lines][chars])
{
    size_t total = 0;
    const char vowels[] = "aAeEiIoOuU";
    for (size_t i = 0; i < lines; i++)
    {
        for (size_t j = 0; inputArray[i][j]; j++)
        {
            total += !!strchr(vowels, inputArray[i][j]);
        }
    }
    return total;
}

int main(void)
{

    char x[][256] = {
        "<Compilation failed>",
        "# For more information see the output window",
        "# To open the output window, click or drag the \"Output\" icon at the bottom of this window",
    };
    printf("%zu\n", countVoweles(sizeof(x)/ sizeof(x[0]), sizeof(x[0]), x));
}

Другие вопросы по теме