C子串匹配

时间:2014-10-18 18:13:29

标签: c regex

我正在尝试实现一个正则表达式类型程序,但只使用字母,而不是像“*”,“。”等元字符。我是C的新手所以我正在努力解决这个问题。< / p>

例如,给定一串“a bb cdcd”和搜索模式b,代码将在代码中找到b的每个实例,并用空格分隔每个实例,所以输出看起来像“bb”。

另一个例子是“abcbcbdbc” - 给定“bc”,程序应匹配输入字符串中的所有bc,即“a bcbc bd bc 所以输出将是“bc bc bc”。

我已经在这几个小时了,不是试图使用任何类型的功能,只是在主方法中实现它,并且想知道是否有人能指出我正确的方向?

这是我到目前为止所做的,作为我的代码的一部分。我已将输入字符串和模式存储到数组中,并希望将输出存储到名为“match”的数组中。 :

int counter = 0;
int j = 0;

for (i = 0; i < stringLength; i++)
{
     if (input_string[i] == search_pattern[j]) {
        j++; }
     else {
        j = 0; }
     if (j == patternLength) {
        j = 0;
        counter++;
     }
    }



print_string("output: "); 

// used to print the substrings

printf("%d",counter); //testing
   int x;
   int y;
   if (counter > 0) {
    for (x = 0; x < counter; x++) {
    for (y = 0; y < patternLength; y++) {
        print_char(search_pattern[y]);
    }
    if (x < counter-1) {
        print_char('#');
     }
    }
   }
   else {
    print_string("No matches found");
   }

但是在输入字符串“abcd”时它不起作用 - 当“ad”打印“ad”时它不应该打印任何内容(可能是一条错误消息说没有找到匹配项?)

提前感谢您的任何帮助:)

1 个答案:

答案 0 :(得分:0)

            int count = 0;
            int pattern_index = 0;
            for (int i = 0; i < inputLength; i++)
            {
                if (input[i] == patternc[pattern_index])
                    pattern_index++;
                else
                {
                    pattern_index = 0;
                    if (input[i] == patternc[0] && patterncLength > 0)
                        pattern_index = 1;
                }
                if (pattern_index == patterncLength)
                {
                    pattern_index = 0;
                    count++;
                }
            }