c ++从另一个字符串的列表中查找任何字符串

时间:2015-07-14 11:33:03

标签: c++

我有什么选择可以从另一个字符串的列表中找到任何字符串?

s是std :: string,我试过

s.find("CAT" || "DOG" || "COW" || "MOUSE", 0);

我想找到这些字符串中的第一个并在字符串中找到它的位置;所以如果s是"我的猫正在睡觉\ n"我得到3作为回报值。

boost::to_upper(s);

被应用(对于那些想知道的人)。

1 个答案:

答案 0 :(得分:0)

您可以将搜索案例转换为DFA。这是最有效的方式。

规定:

nil, c, ca, cat., d, do, dog., co, cow., m, mo, mou, mous, mouse.

转换表:

state | on | goto
nil   | c  | c
nil   | d  | d
nil   | m  | m
c     | a  | ca
c     | o  | co
d     | o  | do
m     | o  | mo
ca    | t  | cat.
co    | w  | cow.
do    | g  | dog.
mo    | u  | mou
mou   | s  | mous
mous  | e  | mouse.
*     | *  | nil

您可以使用许多中间功能来表达这一点。使用了很多开关。或使用枚举表示状态和映射来表示转换。

如果您的测试用例列表是动态的或变得过大,那么手动硬编码状态对您来说就不够了。但是,正如您所看到的,制作状态和转换的规则非常简单。