我想实现一个单词计数算法。然而,~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/

10-10 13:14