我有什么选择可以从另一个字符串的列表中找到任何字符串?
s是std :: string,我试过
s.find("CAT" || "DOG" || "COW" || "MOUSE", 0);
我想找到这些字符串中的第一个并在字符串中找到它的位置;所以如果s是"我的猫正在睡觉\ n"我得到3作为回报值。
boost::to_upper(s);
被应用(对于那些想知道的人)。
答案 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
您可以使用许多中间功能来表达这一点。使用了很多开关。或使用枚举表示状态和映射来表示转换。
如果您的测试用例列表是动态的或变得过大,那么手动硬编码状态对您来说就不够了。但是,正如您所看到的,制作状态和转换的规则非常简单。