字符字符串中的元音数量C ++

时间:2019-02-10 05:24:34

标签: c++

我正在尝试编写一个程序,该程序要求提示用户输入字符序列。它可以是一个单词或整个句子。我已经编写了代码,当它是一个单词时,它可以正确地计算元音的数量,但是我将如何编写它以便在整个句子中计算元音?

我现在拥有的代码:

int main() {
    // Write your main here
    // var
    string word;
    int sum = 0;
    int count = 0;

    // Prompt user to enter a character
    cout << "Enter a sequence of characters: " << endl;
    cin >> word;
    cout << endl;

    int length = word.length();
    for(int i = 0; i < length; i++)
    {
        if (isVowel(word[i]))
        {
            sum += 1;
            count++;
        } // if
    } // for loop

    cout << "There are " << sum << " vowels." << endl;

    return 0;
}

bool isVowel(char letter) {
    switch (letter)
    {
        case 'A' :
        case 'a' :
        case 'E' :
        case 'e' :
        case 'I' :
        case 'i' :
        case 'O' :
        case 'o' :
        case 'U' :
        case 'u' :
            return true;
        default:
            return false;
    }
}

现在输入以下内容:这是一个句子。 输出将是:有1个元音。 我知道我必须将字符串单词更改为char单词,但是然后我不知道如何用它来计算元音的数量。

2 个答案:

答案 0 :(得分:0)

您可以轻松地将cin >> word;更改为getline(cin, word);。它在C ++标准库中。它将读取您的输入,直到第一行。 (输入)

答案 1 :(得分:0)

有多种方法可以解决此问题。为了能够用多个单词找到元音,您必须首先阅读多个单词作为输入。 cin在遇到第一个空白时停止读取字符。因此,使用cin >> word只能读一个单词。相反,请使用getline来读取整个文本的,例如

    std::string line;                   /* string to hold each line */
    ...
    std::cout << "enter characters: ";  /* prompt, read, validate line */
    if (!getline (std::cin, line)) {
        std::cerr << "error: input failure.\n";
        return 1;
    }

阅读整行文本后,您可以使用自动调整范围的for循环遍历每个字符,以检查每个字符是否是元音,或者可以使用C ++提供的其他一些工具帮助您计算元音。 .find_first_of()允许在字符串的指定集中查找第一个字符。参见cppreference std::string - find_first_of。方便地,find_first_of返回原始字符串中找到匹配字符的位置,该位置可以递增并用于查找下一个元音,例如

    const std::string vowels = "AEIOUaeiou";  /* vowels */
    size_t n = 0, nvowels = 0;          /* positon and vowel counts */
    ...
    /* loop until vowel not found in remaining substring */
    while ((n = line.find_first_of (vowels, n)) != std::string::npos) {
        nvowels++;  /* increment vowel count */
        n++;        /* increment n to one past current vowel */
    }

注意:由'n'返回的字符串.find_first_of()中的偏移量增加+1,以索引当前元音之后的下一个字符致电)

添加输出以标识每个元音以及在输入字符串中找到元音的位置,您可以执行以下操作:

#include <iostream>
#include <iomanip>
#include <string>

int main (void) {

    std::string line;                   /* string to hold each line */
    const std::string vowels = "AEIOUaeiou";  /* vowels */
    size_t n = 0, nvowels = 0;          /* positon and vowel counts */

    std::cout << "enter characters: ";  /* prompt, read, validate line */
    if (!getline (std::cin, line)) {
        std::cerr << "error: input failure.\n";
        return 1;
    }
    std::cout << '\n';

    /* loop until vowel not found in remaining substring */
    while ((n = line.find_first_of (vowels, n)) != std::string::npos) {
        nvowels++;  /* increment vowel count */
        std::cout << "  vowel[" << std::setw(2) << nvowels << "] '" << 
                    line[n] << "' at " << n << '\n';
        n++;        /* increment n to one past current vowel */
    }

    std::cout << "\n" << nvowels << " vowels in input string.\n";
}

使用/输出示例

$ ./bin/vowel_find_first_of
enter characters: A quick brown fox jumps over the lazy dog

  vowel[ 1] 'A' at 0
  vowel[ 2] 'u' at 3
  vowel[ 3] 'i' at 4
  vowel[ 4] 'o' at 10
  vowel[ 5] 'o' at 15
  vowel[ 6] 'u' at 19
  vowel[ 7] 'o' at 24
  vowel[ 8] 'e' at 26
  vowel[ 9] 'e' at 31
  vowel[10] 'a' at 34
  vowel[11] 'o' at 39

11 vowels in input string.

可能有六种方法将C ++提供的工具组合在一起以计算元音。这只是想到的 first 第二,毫无疑问,有更好的方法可以做到这一点。

仔细研究一下,如果您有任何疑问,请告诉我。