Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c如何找到有间隙的子字符串?_C - Fatal编程技术网

c如何找到有间隙的子字符串?

c如何找到有间隙的子字符串?,c,C,假设我有一个字符串: a,b,c,d,e-f,g,h, 我想检查它是否包含跳过为1的子字符串abcdefgh 性格我以后可能会将其更改为不同的跳过计数,甚至检查 字符之间具有不同跳过的任何匹配 最好的方法是什么?c中是否有我可能遗漏的内容?您可以定期快速搜索点匹配任何字符的字符串a.b.c.d.e.f.g.h。您可以将其推广为使用长度为一个或多个字符的分隔符字符串与此正则表达式:a.+b.+c.+d.+e.+f.+g.+h将+更改为a*以使用长度为零或多个字符的分隔符。以下是在C中使用REs的

假设我有一个字符串:

a,b,c,d,e-f,g,h,
我想检查它是否包含跳过为1的子字符串abcdefgh 性格我以后可能会将其更改为不同的跳过计数,甚至检查 字符之间具有不同跳过的任何匹配


最好的方法是什么?c中是否有我可能遗漏的内容?

您可以定期快速搜索点匹配任何字符的字符串a.b.c.d.e.f.g.h。您可以将其推广为使用长度为一个或多个字符的分隔符字符串与此正则表达式:a.+b.+c.+d.+e.+f.+g.+h将+更改为a*以使用长度为零或多个字符的分隔符。以下是在C中使用REs的一些指导:


使用REs可能会更容易一些,但在运行时性能方面也会更昂贵。一个更快的解决方案是编写一个函数,该函数接受搜索字符串、分隔符和要搜索的字符串并查找搜索字符串,同时跳过分隔符字符。这是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;
    }
}
注意:首先应该检查字符串的长度是否至少是另一个字符串的两倍