2011-11-29 88 views
2

我刚开始学习C.我现在想要的是,我有两个字符串,其中每个单词由空格分隔,我必须返回匹配单词的数量两个字符串。那么,C语言中是否有任何功能可以把每个单词拿来与另一个单词中的其他单词进行比较,如果不是我可以如何做到的话。迭代C中的字符串,逐字

+5

您可以使用'strtok',但要注意,它实际上会修改字符串。 –

+0

我从来没有遇到'strtok'的问题。这是它的目的。看到这个网站:http://www.cplusplus.com/reference/clibrary/cstring/strtok/ – djhaskin987

+0

或者,使用'isspace',记录开始和结束,并复制它。 – Kevin

回答

1

分手在单词的第一个字符串,这个你可以在任意数量的方式一切从通过字符数组在每个空间插入\0使用strtok循环做。

对于找到的每个单词,使用strstr来检查其他字符串,它检查字符串是否存在。只需检查strstr的返回值,如果!= NULL它找到它。

0

我不想用strtok,但坚持指针算术长度比较和memcmp来比较等长度的字符串。

0

有两个问题在这里:

1)分割每个字符串成字

strtok()功能可将一个字符串转换成单词。

这是一个有意义的练习,可以想象如何编写自己的等效文件strtok

rosetta project显示strtok和一个自定义方法来精确解决这个问题。

我自然会写我自己的解析器,因为它是一种吸引我的代码。这对你来说可能是一个有趣的练习。

2)找到在一个字符串也是另一个

如果您遍历每个单词一个字符串在另一个每个单词的那些话,它有O(n*n)复杂性。

如果您将一个字符串中的单词编入索引,它将只需要O(n),这实际上更快(如果您的输入足够大,可以使其变得有趣)。值得一想的是,如何在一个字符串中构建一个hashtable这样的单词,以便您可以在另一个字符串中查找单词。