Как считать матчи? - PullRequest
       6

Как считать матчи?

0 голосов
/ 22 января 2019

Рассматривая 2 строки, я хочу создать программу на C, которая возвращает количество возможных совпадений между этими 2 строками.

Например,

$>./a.out "abc" "a*"
1

Поскольку возможна только 1match: * = "bc"

$>./a.out "abc" "a**"
3

Поскольку существует только 3 возможных совпадения: (* = "bc", * = "");(* = "", * = "bc");(* = "b", * = "c")

$>./a.out "ab cool ab cool ab" "ab*ab*"
2

Поскольку существует 2 возможных совпадения: (* = "cool", * = "cool ab");(* = "cool ab cool", * = "")

Я выполнил функцию "int match (char *, char *)", которая возвращает значение true, если существует совпадение, и значение false, если его не существует.,Но я хотел бы сейчас подсчитать возможные совпадения.

Любые советы или предложения?

int match(char* string, char* star) {
    if (string[0] == '\0' && star[0] == '\0')
        return 1;
    else if (star[0] == '*')
        return match(string, star+1);
    else if (string[0] == '\0')
        return 0;
    else if (string[0] == star[0]){
        if (star[-1] == '*') {
            if (!match(string+1, star+1))
                return match(string+1, star);
        }
        return match(string+1, star+1);
    }
    else if (string[0] != star[0] && star[-1] == '*')
        return match(string+1, star);
    else if (string[0] != star[0] && star[-1] != '*')
        return 0;
}

1 Ответ

0 голосов
/ 27 января 2019
int count_match(char* string, shar* star) {
    int i;
    for (i = 0; star[i] != '\0'; i += 1) {
        if (star[i] != '*') {
            if (star[i] != string[i])
                return 0;
        }
        else {
            int count = 0;
            int j;
            for (j = i; string[j] != '\0'; j += 1) {
                count += count_match(string + j; star + i + 1);
            count += count_match(string + j; star + i + 1);
            return count;
        }
    }
    return (string[i] == star[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...