If you want to know the amount of times a word (that is a sequence of non-whitespace characters, delimited by spaces), then you should use $findtok($1-,<word>,0,32)
Observe your solution:
//echo -a > $matchtok(grass,ass,0,32)
--> 1
I don't know about you, but there's nothing wrong with saying "grass", it's not the same as "ass".
On the other hand:
//echo -a > $findtok(grass,ass,0,32)
--> 0
Note that $findtok is not the perfect solution either, what if someone says: "you are such an ass!" that won't be triggered, because of the !
It all comes down to how well you want to do the matching, and what amount of false positives you are willing to allow. In the end, you'll probably be served best with a $regex, as it allows you to lay down the rules of matching in a detailed way. An example would be that you would allow the word to be surrounded by non-word characters such as punctuation. That would combine the advantages of both $matchtok and $findtok, with none of the negatives.