gpt4 book ai didi

c++ - 字符串中元音的个数 C++

转载 作者:行者123 更新时间:2023-11-30 04:52:06 24 4
gpt4 key购买 nike

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

我现在的代码:

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 个元音。我知道我必须将 string word 更改为 char word,但我不知道如何使用它来计算元音的数量。

最佳答案

有多种方法可以解决这个问题。为了能够在多个单词中找到元音,您必须首先阅读多个单词作为输入。 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 */
}

(注意 .find_first_of()返回的字符串'n'中的偏移量增加了+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 突然想到的第二个,毫无疑问,还有更好的方法可以做到这一点。

检查一下,如果您有任何问题,请告诉我。

关于c++ - 字符串中元音的个数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com