【发布时间】:2021-12-24 12:38:28
【问题描述】:
我正在从 codewars.com 做一个练习作业,以创建一个程序,该程序将采用巨魔的 cmets 并将其转换为没有元音的语句。
我的想法是获取注释,返回所有不是元音的字符,然后使用迭代器将其放入一个新的字符串数组中。
int main()
{
string troll;
string disemvoweled;
getline(cin,troll);
int length= (int) troll.length();
string::iterator it;
for (it = troll.begin();it!=troll.end();it++) {
if (*it!='a' || *it!='e' || *it!='i' || *it!='o' || *it!='u' || *it!='A' || *it!='E' ||*it!='I' || *it!='O' || *it!='U'){
disemvoweled.append(*it);
}
}
cout << disemvoweled;
return 0;
}
我收到一个错误:
no matching function for call to std::__cxx11::basic_string<char>::append(char&)'
我的第一个问题是为什么 append() 不起作用?
我的第二个问题是,在没有提供任何解决方案的情况下,C++ 的哪个概念可以帮助我改进这段代码?我在想也许使用某种容器并弹出一个元音?
【问题讨论】:
-
您不能直接将字符附加到字符串。对于您的最终解决方案,请查看以下构建块:std::set(元音)、std::ostringstream(字符串构建)和基于范围的 for 循环(比迭代器循环更具可读性)。
-
还有一个逻辑错误 - 如果所有 != eval 都为 true,您只想追加,所以所有 ors (||) 都应该是 ands (&&)
标签: c++ string iterator append