gpt4 book ai didi

c++ - 计算字符串中元音的函数

转载 作者:行者123 更新时间:2023-12-02 22:32:35 25 4
gpt4 key购买 nike

这个函数是我写的。但老师告诉我,在std::count_if函数的第3个rd参数中,需要传递lambda来判断是否该字母是元音

我不知道如何将其转移到那里。

unsigned CalculateVowels(const std::string& str)
{
const std::string& vowels = "aeiouAEIOU";
unsigned count = std::count_if(str.begin(), str.end(), [](int index) {return str[index] == vowels[index]; })

return count;
}

最佳答案

你的 lambda 函数是错误的。

需要检查当前元素是否来自 str匹配 vowels 中的任何元素。您可以使用标准算法 std::any_of 来自<algorithm>此标题。

#include <algorithm> // std::any_of, std::count_if

auto CalculateVowels(const std::string& str)
{
const std::string& vowels = "aeiouAEIOU";
return std::count_if(
str.cbegin(), // for each elements in the elements of passed `str`
str.cend(),
[&vowels](const char element)
{
// following checks `std::any_of` the `vowels` element
// matches the element in the passed `str`
return std::any_of(
vowels.cbegin(),
vowels.cend(),
[element](const char vow) { return vow == element; }
);

}
);
}

( See live online )

<小时/>

如果一行太多,请将其分成小块。

#include <algorithm> // std::find, std::count_if 

auto CalculateVowels(const std::string& str)
{
const std::string& vowels = "aeiouAEIOU";
// lambda to check whether passed `char` element is a match
// of any of the `vowels`
const auto isVowel = [&vowels](const char element_to_be_checked)
{
return std::any_of(
vowels.cbegin(),
vowels.cend(),
[element_to_be_checked](const char vow)
{
return vow == element_to_be_checked;
}
);
};
// now simply `std::count_if` the element `isVowel`
return std::count_if(str.cbegin(), str.cend(), isVowel);
}
<小时/>

或者像@DimChtz试图在评论中解释,使用 std::find 或者甚至更好,如 @RemyLebeau 建议,使用 std::string::find

#include <string>    // std::string::find
#include <algorithm> // std::find, std::count_if

auto CalculateVowels(const std::string& str)
{
const std::string& vowels = "aeiouAEIOU";
const auto isVowel = [&vowels](const char element_to_be_checked)
{
// return std::find(vowels.cbegin(), vowels.cend(), element_to_be_checked) != vowels.cend();
// or using `std::string::find`
return vowels.find(element_to_be_checked) != std::string::npos;
};
return std::count_if(str.cbegin(), str.cend(), isVowel);
}

( See live online )

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

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