gpt4 book ai didi

c++ - 除了使用不同的 size_t 变量,我可以只使用一个来多次搜索 std::string 吗?

转载 作者:行者123 更新时间:2023-11-30 01:27:43 25 4
gpt4 key购买 nike

我想知道是否可以减少我在这里使用的 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!");
}

在找到 21 之前,我还有 else if 语句。我想把所有东西都缩小,这样就干净了,但我不知道该怎么做。我也希望它把这个词小写。我也从来没有用过 tolower,所以如果有人能帮助我,我将不胜感激。

最佳答案

要小写一个字符串,你可以这样做

std::transform(msg.begin(), msg.end(), msg.begin(), std::tolower);

Transform 将开始和结束迭代器作为第一个和第二个参数,对于该范围内的每个元素,应用第四个参数(一个函数)并将其分配给第三个迭代器指向的对象并递增它。通过将 msg.begin() 作为第一个和第三个参数传递,它将函数的结果分配给它传递给它的内容。所以 transform 基本上会这样做:

for (auto src = begin(msg), dst = begin(msg); src != end(msg); ++src, ++dst)
*dst = tolower(*src);

但是使用 transform 就好多了。

要检查字符串是否包含子字符串列表中的任何一个,您可以使用带有 vectorfor 循环:

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
}

关于c++ - 除了使用不同的 size_t 变量,我可以只使用一个来多次搜索 std::string 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510789/

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