我创建了一款面向年轻观众的游戏,并试图过滤掉亵渎和冒犯的名字
#include <iostream>
#include <vector>
bool isBanned( std::string text ) {
std::vector bannedSent = {
"Profanity1",
"Profanity2",
"Profanity3",
"Profanity4"
};
for(auto &i : bannedSent) {
if(text == i) { return true; }
}
return false;
}
我在编写错误时谈到“模板参数”,与std::vector
一致,这是什么意思?
答案 0 :(得分:7)
您需要为矢量提供模板参数。由于你持有字符串,你需要声明它:
std::vector< std::string > bannedSent = {
"Gosh",
"Golly",
"Jeepers",
"Troll"
};
答案 1 :(得分:3)
最简单的解决方案实际上是而不是来指定类型。编译器已经有了一个不错的主意,你已经知道了关键字:
auto bannedSent = {
"Profanity1",
"Profanity2",
"Profanity3",
"Profanity4"
};
for(auto i : bannedSent) { ...
附带好处:这可以避免在每次调用中构造4个std::string
个对象。
请注意,您之前使用过auto& i
。这是一个错误,你不打算改变bannedSent
。
答案 2 :(得分:1)
如果应该是std::vector<std::string>
:
bool isBanned( std::string text ) {
std::vector<std::string> bannedSent = {
...
}
}
答案 3 :(得分:1)
由于您包含C ++ 11标记,因此您还可以使用any_of()
:
#include <vector>
#include <string>
#include <algorithm>
bool isBanned(const std::string & text)
{
const std::vector<std::string> bannedSent = {
"Profanity1",
"Profanity2",
"Profanity3",
"Profanity4",
};
return std::any_of(bannedSent.begin(), bannedSent.end(), [text](std::string &s){return s == text; });
}