コード例 #1
0
ファイル: match.hpp プロジェクト: lsytj0413/liter
    virtual int match_imp(const string& s, const string& pattern) override final {
        gen_next(pattern);

        int i = 0;
        int j = 0;

        while(i < s.size() && j < int(pattern.size())) {
            if (j == -1 || s[i] == pattern[j]) {
                // 从s的下一个字符进行匹配
                // 若-1==j, 则相当于从s[i+1], p[0]重新进行匹配
                // 若-1!=j, 则相当于此次匹配成功, 继续进行下一个字符的匹配
                ++i;
                ++j;
            }
            else {
                // 匹配失败, 向右滑动模式串
                j = m_next[j];
            }
        }

        if (j == pattern.size()) {
            return i - j;
        }
        else {
            return -1;
        }
    };
コード例 #2
0
ファイル: generate.c プロジェクト: nate1001/chesslib
ChessMove chess_move_generator_next(ChessMoveGenerator* generator)
{
    ChessMove move = 0;
    while ((move = gen_next(generator)) && !move_is_legal(generator->position, move))
        ;
    return move;
}
コード例 #3
0
ファイル: match.hpp プロジェクト: lsytj0413/liter
    vector<int> test_gen_next(const string& pattern) {
        if (!pattern.empty()) {
            gen_next(pattern);
        }

        return m_next;
    }
コード例 #4
0
ファイル: 2406.cpp プロジェクト: pyyaoer/poj
int main(void){
	while(scanf("%s", str) != EOF){
		if (strcmp(str, ".") == 0){
			break;
		}
		printf("%d\n", gen_next());
		memset(str, 0, sizeof(str));
	}
}