小编Pad*_*dre的帖子

使用后缀数组和LCP(-LR)实现字符串模式匹配

在过去的几周里,我试图弄清楚如何在另一个字符串中有效地找到字符串模式.

我发现很长一段时间,最有效的方法是使用后缀树.但是,由于这种数据结构在空间上非常昂贵,我进一步研究了后缀数组的使用(使用的空间要少得多).不同的论文,如"后缀数组:一种新的在线字符串搜索方法"(Manber&Myers,1993)指出,搜索子字符串可以在O(P + log(N))中实现(其中P是通过使用二进制搜索和后缀数组以及LCP数组,模式的长度和N是字符串的长度.

我特别研究了后一篇论文来理解搜索算法.这个答案在帮助我理解算法方面做得非常出色(并顺便将其纳入LCP维基百科页面).

但我仍在寻找实现此算法的方法.特别是所提到的LCP-LR阵列的构造看起来非常复杂.

参考文献:

Manber&Myers,1993:Manber,Udi; Myers,Gene,SIAM Journal on Computing,1993,Vol.22(5),pp.935-948,http: //epubs.siam.org/doi/pdf/10.1137/0222058

更新1

只是为了强调我感兴趣的东西:我理解LCP数组,并找到了实现它们的方法.但是,"普通"LCP阵列不适合有效的模式匹配(如参考文献中所述).因此,我对实现LCP-LR阵列感兴趣,这似乎比实现LCP阵列复杂得多

更新2

添加了参考文件的链接

c c++ string pattern-matching

13
推荐指数
1
解决办法
3994
查看次数

如何使用qDebug打印包含换行符的QString

这段代码:

QString output("test1\ntest2");
qDebug() << output;
Run Code Online (Sandbox Code Playgroud)

导致这个输出:

"test1\ntest2"
Run Code Online (Sandbox Code Playgroud)

我想要的是:

"test1
test2"
Run Code Online (Sandbox Code Playgroud)

那么我如何使用qDebug()(和类似的输出函子)来打印包含多行换行符的QString?

c++ qt

9
推荐指数
1
解决办法
4945
查看次数

automake:自动运行单元测试

我正在维护一个autoconf软件包,并希望集成自动测试.我使用Boost Unit Test Framework我的单元测试,并能够成功地将其集成到包中.

也就是说它可以通过编译make check,但是没有运行(尽管我读过它们make check都编译并运行测试).结果,我必须在构建繁琐的测试后手动运行它.

Makefile.am 在test文件夹中看起来像这样:

check_PROGRAMS = prog_test
prog_test_SOURCES = test_main.cpp ../src/class1.cpp class1_test.cpp class2.cpp ../src/class2_test.cpp ../src/class3.cpp ../src/class4.cpp
prog_test_LDADD = $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_UNIT_TEST_FRAMEWORK_LIB)
Run Code Online (Sandbox Code Playgroud)

Makefile.am 在根文件夹中:

SUBDIRS = src test
dist_doc_DATA = README
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4
Run Code Online (Sandbox Code Playgroud)

运行test/prog产生输出:

Running 4 test cases...

*** No errors detected
Run Code Online (Sandbox Code Playgroud)

(我不认为你需要我的测试用例的内容才能回答我的问题,所以我现在省略了它们)

那么我怎样才能automake在每次跑步时运行我的测试make check

automake autoconf unit-testing makefile boost-unit-test-framework

5
推荐指数
1
解决办法
3278
查看次数

使用GitPython进行git-clean

有没有办法像git clean -d -x -f使用GitPython一样?

我需要重置工作目录,并希望摆脱所有未版本控制的文件而不删除整个文件夹(除了.git)并再次签出.

python git gitpython git-clean

3
推荐指数
1
解决办法
1247
查看次数

Frama-C:获取C断言语句的切片

有没有一种方法可以使用Frama-Cslicing插件为特定的C assert语句计算切片?

例如,给出以下代码:

int main() {
    double a=3;
    double b=4;
    double c=123;

    assert(b>=0);

    double d=a/b;
    c=a;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想得到以下切片assert(b>=0);

int main() {
    double b=4;

    assert(b>=0);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

frama-c program-slicing

3
推荐指数
1
解决办法
169
查看次数

C++:如何检查不带扩展名的文件类型

我用来boost::filesystem搜索和处理目录中的文件。boost::filesystem::is_regular_file()但我只想处理文本文件(或至少忽略二进制文件),而不是处理每个文件(通过使用检查)。

即使文件没有扩展名,有没有办法可以实现这一点?

我非常感谢独立于平台的解决方案。

c++ linux boost

1
推荐指数
1
解决办法
5036
查看次数