从 std::set 中提取单词,其中C++字母"A"



我有一组单词(BELLOW、CELLO、HAAF、HABIT、HADAL、HAIR、HELLO、HELP、RABIT(存储在std::set数据结构中。

  1. 从上面的集合DS中,我想提取以"H"开头(第0个索引(的单词,并将其存储在其他容器中(比如std::setstd::string ctr(。现在,ctr将有-HAAF,HABIT,HADAL,HAIR,HELLO,HELP

  2. 现在,我想从容器ctr中获取第二个字母(第一个索引(为"A"的单词。现在,ctr将有-HAAF,HABIT,HADAL,HAIR

  3. 我想获取除第0&第一指数。基本上,我不想检查字符串的第0和第1个位置。

    现在,ctr将拥有-HAAF、HADAL

我不知道如何做第三步。

#include <iostream>
#include <set>
int main()
{
std::set<std::string> words = {"BELLOW", "CELLO",  "HAAF", 
"HABIT",  "HADAL", "HAIR",
"HELLO", "HELP", "RABIT"};
for (const std::string& s : words) {
std::cout << s << std::endl;    
}

std::set<std::string> etr;

/* Extract words start with letter 'H' */
for (const std::string& s : words) {
if (s[0] == 'H') {
//std::cout << s << std::endl;  
etr.insert(s);
}
}

std::cout << std::endl;

for (const std::string& s : etr) {
std::cout << s << std::endl;    
}

std::set<std::string> etr2;

/* Extract words start with letter 'H' & 
second letter as 'A' */
for (const std::string& s : etr) {
if (s[1] == 'A') {
//std::cout << s << std::endl;  
etr2.insert(s);
}
}

std::cout << std::endl;

for (const std::string& s : etr2) {
std::cout << s << std::endl;    
}

/* Extract words start with letter 'H' & 
second letter as 'A', and any other letter as 'A'
but not second letter */
// << I'm not sure  >>    

return 0;
}

运行此程序的链接

我所期望的解决方案:

for (const std::string& s : etr2) {
size_t occ = s.find('A');
// Repeat till end is reached
while(occ != std::string::npos) {
if (std::find(pos.begin(), pos.end(), occ) == pos.end()) {
etr.insert(s);
}
// Get the next occurrence from the current position
occ = s.find('A', occ + 1);
}
}

查找此解决方案的链接

与检查其他单词的方法相同:对集合进行迭代,但这次对每个单词进行迭代,并检查在合适的位置是否有A

但请注意,以前的检查可以在std::set排序时更有效地完成,并且您需要提取"H""I"之间的字符串(IH之后(。两个set::lower_bound调用将返回范围。

相关内容

  • 没有找到相关文章

最新更新