编辑:
再一次,我将尝试更准确地解释它。
我正在编写 IRC 客户端 - 基于套接字的网络应用程序。使用函数从服务器接收数据recv()
并将它们一个字符一个字符地存储在rBuf[]
数组中。
然后将它们复制到rBufh[]
传递给解析函数的数组中。
重要的是服务器一次只发送一个字符[一个字符在一个recv()中]和键(存储在两个dim.array []中的字符数组key1
)是字符串,如果解析方法在接收到的数据中找到其中一个它需要根据协议文档中指定的 3 位代码做出正确反应。- 至于基础。
解析算法/函数的工作原理如下:
key1
(包含键)和rBufh
数组是传递给它的参数- 获取存储的第一个字符串的第一个字符
key1
并将其与第一个字符进行比较rBufh
- 如果它们匹配返回
int ret = 2
(这意味着“在收到的数据中找到了部分密钥”
现在recv()
将一个字符(因为服务器每次只发送字符)添加到rBufh
数组中,该数组再次传递给解析函数,算法再次开始,直到找到匹配的键,返回int ret = 1
(找到匹配的键)或者int ret = 0
如果在第 3 步中他们没有匹配。
在解析器工作时,停止打印到标准输出并根据解析器打印返回的值停止较长时间(如果key1
找到数组中的一个键的一部分)或允许打印(如果已找到整个键或解析器无法将rBufH
数组中传递给它的字母与存储在key1
) 中的任何键匹配
我们越来越接近理解我的要求 - 我希望:)
存储在数组中的字符串数量key1
是事先知道的,因为它们在协议文档中指定。因此可以在定义时立即对其进行初始化。
我问的是:
是否可以传递给key1
(不一定像我那样使用 sprintf - 它看起来很方便)字符串,该字符串将包含代码的某些部分,意思是“任何三位数字”。
例如
,让上面 3 行提到的代码部分用 XXX 标记
key1[0] = "irc2.gbatemp.net XXX nickname"
现在,如果解析器遇到任何与 key1[0] 匹配的字符串,其中包含任意三位数代替 XXX,它将返回 1 - 因此其他函数将有可能做出正确反应。
这样我就不必在key1
数组中存储许多具有不同 XXX 值的字符串,而只需一个可以匹配所有字符串的字符串。
好的,现在我真的尽力帮助您理解它并获得答案:)
问候
汤姆
附言
随意更改此主题的标题,因为我真的不知道应该如何用您已经注意到的几句话来描述这个问题。(之所以如此,是因为我的第一个想法是将一些正则表达式传递给key1
)