小编anu*_*g86的帖子

boost :: tokenizer考虑分隔符之间没有令牌

我正在使用boost :: tokenizer来获取';' 从a分开的字段string.我可以检索下面代码中显示的字段,但我有两个问题:

  1. 是否存在任何令牌器提供的函数,以根据提供的分隔符知道字符串中的令牌数量?
  2. 假设测试字符串有3个字段a;b;c.以下代码将打印所有这些代码.但我也需要打印空字段.例如柜面字符串的a;;;b;c令牌也应该包含什么作为第二和第三元素.或者换句话说,第二和第三个标记应该是空的.
#include <boost/tokenizer.hpp>
namespace std;
namespace boost;
int main()
{
    string data="a;;;;b;c";
    boost::char_separator<char> obj(";");
    boost::tokenizer<boost::char_separator<char> > tokens(data,obj);
    cout<<endl<<tokens.countTokens();
    for(boost::tokenizer<boost::char_separator<char> >::iterator it=tokens.begin();
    it!=tokens.end();
    ++it)
    {
        std::cout<<*it<<endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-tokenizer

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

通过指向函数指针数组的指针调用函数

我正在尝试理解通过指向函数指针数组的指针来调用函数的语法。我有一个函数指针数组FPTR arr[2],以及一个指向该数组的指针FPTR (vptr)[2]。但这在尝试通过指向数组的指针进行调用时给了我一个错误

typedef int (*FPTR)();
int func1(){
        cout<<"func1() being called\n";
}
int func2(){
        cout<<"fun2() being called\n";
}

    FPTR arr[2] = {&func1,&func2};

    FPTR (*vptr)[2];
    vptr=&arr;

    cout<<"\n"<<vptr[0]<<endl;
    cout<<"\n"<<vptr[0]()<<endl;  // ERROR  when trying to call the first function
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers

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

为什么unique_ptr可以工作但auto_ptr不能与STL一起使用

我在这些问题上提到了很多StackOverflow链接,其中auto_ptr不能与STL很好地配合 的原因std::auto_ptr<>不能满足可复制构造和可分配的要求(因为auto_ptr有一个伪造的复制构造函数,它基本上可以转移所有权)。

但是,甚至unique_ptr没有复制ctor和赋值运算符(已禁用),那么如何满足可复制构造和可赋值的要求呢?

c++ stl auto-ptr copy-constructor unique-ptr

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

类型转换指向int崩溃的指针

我曾经认为cout语句指向相同的值,即使一个以十六进制打印,其他以整数格式打印.但今天我在g ++上运行相同的内容,发现第二个语句崩溃了.

int i1=12;
int *p1=&i1;

cout<<*(*((int***)&p1)); cout<<"\n\n           "; //is same
cout<<*(int*)*(int*)&p1; cout<<"\n           "; //is same
Run Code Online (Sandbox Code Playgroud)

为什么有效地将第二个语句与打印值相同时会崩溃i1.

c++

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

为什么不在perl中使用awk?

可能这个问题多次被问到能否在你的perl脚本中加入awk one liner.但是这些问题对于以下问题过于具体:

  1. 提供了一种不同的方法作为建议或
  2. 现有代码中的语法已被纠正OR
  3. 大多数时候 - >解决方案是使用perl提供的,因为专家喜欢使用awk或perl,因为他们都做同样的工作.是.也许.但我认为awk是针对特定问题而设计的,这些问题可以在awk中比perl更好地解决.

示例:我有输出,ls -lart第9列是文件名.我很容易在awk中做到这一点ls -lart|awk '{print $9}'.同样的事情当然可以使用perl来完成readdir().但是在perl中提取第8列或第7列并不容易?如果我必须提取数据管道将其管道输送到sed等,情况会变得更糟.

另一个例子: 我有一个特定的DIR,它有许多格式的文件,如:

ABC_9090_DEF_10-22-30_13-07-2014.temp
Run Code Online (Sandbox Code Playgroud)

注意date_time.temp标记部分.这里的格式是ABC_4digits_DEF_hours-minutes-seconds_day-month-year

我想只看到刚刚创建的新文件(比如说从现在起5分钟之前).使用awk/sed的方法是(伪代码,让我知道你是否需要我复制实际的一个班轮):

  1. ls -lart|awk '{print $9}'|
  2. egrep 提取10-22-30_13-07-2014
  3. 使用sed替换_ with - | awk重新排列以具有YEARMONTHDAYHOURSMINUTESSECONDS格式的数字.
  4. 使用awk再次比较这个数字使用if($ 1> $ mynum)对变量(假设有一个相同格式的数字代表TODAYS TIME - 5分钟)

问题: 但由于某种原因(其他复杂性)我想在perl中编写它并且我发现当使用系统命令在perl中使用它时,if条件if($ 1> $ mynum)会抛出错误.它说使用'>'语法错误,即使使用单引号,双引号,没有引号.

有人可以告诉我一般情况:

  1. 如果给出选择,为什么有人不会在这种情况下使用awk,sed而不是perl?
  2. 在perl中包含awk或sed时应该记住的事情的一般解释不是特定于这个问题(希望也应该解决这个特定的问题).

regex perl awk sed

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