相关疑难解决方法(0)

关于正则表达式的gcc 4.8或更早的bug吗?

我试图在C++ 11代码中使用std :: regex,但看起来支持有点儿错误.一个例子:

#include <regex>
#include <iostream>

int main (int argc, const char * argv[]) {
    std::regex r("st|mt|tr");
    std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl;
    std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl;
    std::cerr << "st|mt|tr" << " matches tr? " << std::regex_match("tr", r) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

st|mt|tr matches st? 1
st|mt|tr matches mt? 1
st|mt|tr matches tr? 0
Run Code Online (Sandbox Code Playgroud)

当使用gcc(MacPorts gcc47 4.7.1_2)4.7.1编译时,使用

g++ *.cc -o test -std=c++11 …
Run Code Online (Sandbox Code Playgroud)

c++ regex gcc libstdc++ c++11

98
推荐指数
2
解决办法
3万
查看次数

C或C++有标准的正则表达式库吗?

可以?如果是的话,我在哪里可以得到它的文件......如果没有,那么哪个是最好的选择?

c c++ regex standard-library

17
推荐指数
4
解决办法
2万
查看次数

正则表达式:boost :: xpressive vs boost :: regex

我想在C++中做一些正则表达式,所以我查看了interwebz(是的,我是C++的初学者/中级)并找到了这个SO答案.

我真的不知道在boost :: regex和boost :: xpressive之间做什么选择.有哪些优点/缺点?

我还读到与boost :: regex相对的boost :: xpressive是一个只有头的库.是不是很难在Linux和Windows上静态编译boost :: regex(我几乎总是编写跨平台应用程序)?

我也对编译时间的比较感兴趣.我有一个使用boost :: xpressive的当前实现,我对编译时间不太满意(但我没有与boost :: regex进行比较).

当然,我也对正则表达式实现的其他建议持开放态度.要求是免费的(如在啤酒中)并与http://nclabs.org/license.php兼容.

c++ regex boost boost-xpressive

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

C++使用正则表达式对字符串进行标记

我正试图从头开始学习一些C++.
我精通python,perl,javascript,但在过去的课堂环境中只是简单地遇到过C++.请原谅我的问题的天真.

我想使用正则表达式拆分一个字符串,但是没有太多运气找到一个清晰,明确,有效和完整的如何在C++中执行此操作的示例.

在perl中,这是行动是常见的,因此可以以微不足道的方式完成,

/home/me$ cat test.txt
this is  aXstringYwith, some problems
and anotherXY line with   similar issues

/home/me$ cat test.txt | perl -e'
> while(<>){
>   my @toks = split(/[\sXY,]+/);
>   print join(" ",@toks)."\n";
> }'
this is a string with some problems
and another line with similar issues
Run Code Online (Sandbox Code Playgroud)

我想知道如何最好地完成C++中的等价物.

编辑:
我想我在boost库中找到了我想要的东西,如下所述.

boost regex-token-iterator(为什么不强调工作?)

我想我不知道该搜索什么.


#include <iostream>
#include <boost/regex.hpp>

using namespace std;

int main(int argc)
{
  string s;
  do{
    if(argc == 1)
      {
        cout << "Enter text to …
Run Code Online (Sandbox Code Playgroud)

c++ regex split tokenize

12
推荐指数
1
解决办法
2万
查看次数

用于指定值约束的通用语言

我正在寻找一种定义文本表达式的通用方法,它允许验证值.

例如,我有一个值应该只设置为1,2,3,10,11或12.它的约束可以定义为: (value >= 1 && value <= 3) || (value >= 10 && value <= 12)

或者另一个可以是1,3,5,7,9等的值......会有像value % 2 == 1或那样的约束IsOdd(value).

(为了帮助用户更正无效值,我想显示约束 - 所以描述IsOdd性更好.)

这些约束将在客户端(用户输入之后)和服务器端进行评估.因此,多平台解决方案将是理想的(特别是Win C#/ Linux C++).

是否存在允许评估或解析类似简单表达式的现有语言/项目?

如果没有,我可以从哪里开始创建自己的?

我意识到这个问题有点模糊,因为我不完全确定我追求的是什么.搜索结果没有结果,因此即使某些术语作为起点也会有所帮助.然后我可以相应地更新/标记问题.

language-agnostic validation arithmetic-expressions

10
推荐指数
2
解决办法
224
查看次数

为什么这个C++ 11 std :: regex示例会抛出一个regex_error异常?

试图学习如何在C++ 11中使用新的std :: regex.但我尝试的例子是抛出一个我不明白的regex_error异常.这是我的示例代码:

#include <iostream>
#include <regex>

int main()
{
    std::string str = "xyzabc1xyzabc2xyzabc3abc4xyz";
    std::regex re( "(abc[1234])" ); // <-- this line throws a C++ exception

    // also tried to do this:
    // std::regex re( "(abc[1234])", std::regex::optimize | std::regex::extended );

    while ( true )
    {
        std::cout << "searching in " << str << std::endl;
        std::smatch match;
        std::regex_search( str, match, re );
        if ( match.empty() )
        {
            std::cout << "...no more matches" << std::endl;
            break;
        }
        for ( auto x …
Run Code Online (Sandbox Code Playgroud)

c++ regex g++ c++11

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

C++字符串解析思路

我有另一个程序的输出,这个程序更像是人类可读而不是机器可读,但我还是打算解析它.这没什么太复杂的.

然而,我想知道在C++中最好的方法是什么.这更像是一种"一般惯例"类型的问题.

我查看了Boost.Spirit,甚至让它工作了一下.那东西太疯狂了!如果正在设计我正在阅读的语言,它可能是适合这项工作的工具.但实际上,考虑到它的极端编译时间,当我做错任何事情时,g ++会出现几页错误,这不是我需要的.(我也不太需要运行时性能.)

考虑使用C++运算符<<,但这似乎毫无价值.如果我的文件中有"John有5个小部件"这样的行,而其他人"Mary在459 Ramsy street工作",我怎么能确保我的程序中有第一个类型的行,而不是第二个类型?我必须阅读整行,然后使用类似的东西string::find,string::substr我想.

那就离开了sscanf.它会很好地处理上述情况

if( sscanf( str, "%s has %d widgets", chararr, & intvar ) == 2 )
      // then I know I matched "foo has bar" type of string, 
      // and I now have the parameters too
Run Code Online (Sandbox Code Playgroud)

所以我只是想知道我是否遗漏了某些内容,或者C++是否真的没有太多的内置替代品.

c++ string parsing

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

处理巨大的文本文件

问题: 我有一个巨大的原始文本文件(假设为3gig),我需要浏览文件中的每个单词,并发现文件中出现了多少次单词.

我建议的解决方案: 将大文件拆分成多个文件,每个拆分文件都有一个排序的文字.例如,所有以" a " 开头的单词都将存储在" _a.dic "文件中.所以,我们任何时候都不会超过26个文件.

这种方法的问题是,

我可以使用流来读取文件,但是想使用线程来读取文件的某些部分.例如,使用单独的线程读取0-1024个字节(至少有4-8个线程,基于处理器中存在的处理器数量).这是可能的还是我在做梦?

有更好的方法吗?

注意:它应该是纯c ++或基于c的解决方案.不允许有数据库等.

c++ multithreading text-files

5
推荐指数
2
解决办法
3994
查看次数

有没有更好的方法来解析这样的文本行?

我有一个文本行的文本文件,其中包含一个字符串,另一个字符串后跟最多4个整数,例如:

clear "clear water.png" 5 7
wet "wet water.png" 9 5 33 17
soft "soft rain falling.png" 
Run Code Online (Sandbox Code Playgroud)

我看到的唯一方法是:

阅读直到找到空间

将字符串设置为湿

读到双引号

读到第二个双引号

将第二个字符串设置为wet water.png

而不是行尾

读到太空

把字符串放入字符串流

将结果整数推送到int的向量中

有一个更好的方法吗?

谢谢

c++ string parsing

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