说我有一个字符串:
a,b,c,d,e-f,g,h,
我想检查它是否包含abcdefgh
跳过 1 个字符的子字符串。我可以稍后将其更改为不同的跳过计数,甚至检查字符之间是否存在不同跳过的匹配。
解决这个问题的最佳方法是什么?c语言中有什么我可能遗漏的东西吗?
说我有一个字符串:
a,b,c,d,e-f,g,h,
我想检查它是否包含abcdefgh
跳过 1 个字符的子字符串。我可以稍后将其更改为不同的跳过计数,甚至检查字符之间是否存在不同跳过的匹配。
解决这个问题的最佳方法是什么?c语言中有什么我可能遗漏的东西吗?
一个简单的 for 循环就可以了:
const char *d = "abcdefgh";
const char *s = "a,b,c,d,e-f,g,h,";
int len = strlen(s);
for (i=0; i<len; i+=2) {
if (s[i] != d[i/2]) {
/* not equal */
break;
}
}
注意:您应该首先检查字符串的长度至少是另一个长度的两倍。
您可以对字符串“abcdefgh”(点匹配任何字符)进行正则快速搜索。您可以将其概括为使用以下正则表达式使用长度为一个或多个字符的分隔符字符串:“a.+b.+c.+d.+e.+f.+g.+h”(将 + 更改为 *使用长度为零或多个字符的分隔符)。以下是在 C 中使用 RE 的一些指导:C 中的正则表达式:示例?
使用 RE 可能会更容易一些,但在运行时性能方面的成本也会更高。更快的解决方案是编写一个函数,该函数采用搜索字符串、分隔符和要搜索的字符串并查找搜索字符串,同时跳过分隔符字符。这是 C 编程中的一个很好的练习——即使你找到了一种更简单的方法,我想你也会从自己编写这个函数中得到很多。