2013-09-09 4 views
1

Я работаю над этим алгоритмом Морриса-Пратта, чтобы соответствовать подстрокам текста, и у меня возникают проблемы с объявлением функции сбоя в фактической функции, поэтому компилятор выиграл Не жалуйтесь. Мне нужно 2 часа, чтобы закончить это. Поэтому, пожалуйста, помогите мне скоро:/Функция не объявлена ​​в области (C++)

int KMPmatch(const string& text, const string& pattern) 
{ 
    int n = text.size(); 
    int m = pattern.size(); 
    std::vector<int> fail = computeFailFunction(pattern); 
    int i = 0; 
    int j = 0; 

    while (i < n) 
    { 
    if (pattern[j] == text[i]) 
    { 
     if (j == m-1) return i-m+1; 
     i++; j++; 
    } 
    else if (j > 0) j = fail[j-1]; 
    else i++; 
    } 

    return -1; 
} 

//KMPFailure function 
std::vector<int> computeFailFunction(const string& pattern) 
{ 
    std::vector <int> fail(pattern.size()); 
    fail[0] = 0; 
    int m = pattern.size(); 
    int j = 0; 
    int i = 1; 

    while (i < m) 
    { 
    if (pattern[j] == pattern[i]) 
    { 
     fail[i] = j+1; 
     i++; j++; 
    } 
    else if (j > 0) 
    { 
     j = fail [j-1]; 
    } 
    else 
    { 
     fail[i]= 0; 
     i++; 
    } 
    } 

    return fail; 
} 
+1

Вы отправили объявление 'std :: vector computeFailFunction (const string & pattern);' before 'KMPmatch'? – greatwolf

+0

Нет. Мой плохой. Теперь он отлично компилируется! благодаря – Gela

ответ

0

Положите std::vector<int> computeFailFunction(const string& pattern); впереди int KMPmatch(const string& text, const string& pattern).

Или поместить объявление функции в заголовочный файл и включить в исходные файлы, то есть проект с несколькими исходными файлами.