我想实现一个单词计数算法。然而,~two tildes~
中出现的任何内容都被视为1个单词。因此我认为regex可能是最好的选择?
计数必须在每一个大约10000个字符的样本集上按一次键计算,这样做很好。
最佳答案
str = str.Trim() + " ";
var count = 0;
var inWord = false;
var inTilde = false;
foreach (var c in str)
{
switch (c)
{
case ' ':
case '\t':
case '\r':
case '\n':
if (!inTilde && inWord)
{
inWord = false;
count++;
}
case '~':
if (inTilde)
{
count++;
inWord = false;
}
inTilde = !inTilde;
default:
inWord = true;
}
}
没有测试,但是很直接。。。
另外,请注意
~hi one~two~three four~
将计算为hi one, two, three four
,以及~hi one~two~three four
,即使没有结束颚化符。关于c++ - 使用正则表达式的有效字数统计方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12666553/