我可以使用一个变量来多次搜索std::string,而不是使用不同的size_t变量吗?
Instead of having different size_t variables, can I use just one for searching a std::string multiple times?
我想知道是否有可能减少我在这里使用的多少size_t变量。以下是我的文件:
std::size_t found, found2, found3, found4 /* etc */;
每个都有自己的字符串要查找:
found1 = msg.find("string1");
found2 = msg.find("string2");
found3 = msg.find("string3");
found4 = msg.find("string4");
// etc
如果找到该单词,它将丢弃并阻止消息显示:
if (found1 != std::string::npos)
{
SendMsg("You cannot say that word!");
}
我有else if语句直到found21。我想把所有东西都缩小,这样就干净了,但我不知道该怎么做。我还想把这个单词小写。我也从来没用过鲜花,所以如果有人能帮帮我,我会很感激的。
要小写字符串,可以执行
std::transform(msg.begin(), msg.end(), msg.begin(), std::tolower);
Transform以begin和end迭代器作为第一个和第二个参数,对于该范围内的每个元素,应用第四个参数(一个函数),并将其赋值给第三个迭代器所指向的对象,并对其加1。通过传递msg.begin()
作为第一个和第三个参数,它将把函数的结果赋值给它传递给它的结果。所以transform
会这样做:
for (auto src = begin(msg), dst = begin(msg); src != end(msg); ++src, ++dst)
*dst = tolower(*src);
但是使用transform
要好得多。
要检查字符串是否包含任何子字符串列表,您可以使用for
循环和vector
:
vector<string> bad_strings { "bad word 1", "bad word 2", "etc" };
for (auto i = begin(bad_strings); i != end(bad_strings); ++i)
if (msg.find(*i)) {
SendMsg("You cannot say that word!");
break; // stop when you find it matches even one bad string
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 为什么向量不支持 size 作为成员变量,就像 Java 类中的长度变量一样,而是函数 size()?
- 在C++中定义包含TTF_Font变量的向量时"Undefined size"错误
- 可以将vector.size()的结果存储到int类型的变量中吗
- 如何比较cocos2dx中的float和Size变量内容
- 使用 .size() 与 const 变量进行循环