1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include <iostream>
#include <seqan/index.h>
using namespace seqan2;
int main()
{
StringSet<String<char> > text;
appendValue(text, "How much");
appendValue(text, " wood would");
appendValue(text, " a woodchuck chuck?");
typedef Index<StringSet<String<char> > > TIndex;
TIndex index(text);
Iterator<TIndex, TopDown<> >::Type it(index);
CharString pattern = "wood";
while (repLength(it) < length(pattern))
{
// go down edge starting with the next pattern character
if (!goDown(it, pattern[repLength(it)]))
return 0;
unsigned endPos = _min(repLength(it), length(pattern));
// compare remaining edge characters with pattern
std::cout << representative(it) << std::endl;
if (infix(representative(it), parentRepLength(it) + 1, endPos) !=
infix(pattern, parentRepLength(it) + 1, endPos))
return 0;
}
// if we get here the pattern was found
// output match positions
for (unsigned i = 0; i < length(getOccurrences(it)); ++i)
std::cout << getOccurrences(it)[i] << std::endl;
return 0;
}
|