0

我正在写类似标记器的东西。我想boost::string_ref用来返回“令牌值”。我想遍历 string_ref 逐字符读取字符,然后返回包含值的子字符串。

让我们看一个非常简约的例子:

string test = "testing string";
boost::string_ref rtest(test);

//-------- and now we can go this way --------
auto begin = rtest.begin();
auto end   = rtest.end();
for(/*something*/){
    process_char(*end); // print char
    end ++;
}
// how to return rtest(begin,end)?

// -------- or this way --------
int begin = 0;
int end   = 0;
for(/*something*/){
    process_char(rtest[end]);
    end++;
}
return rtest.substr(begin, end);

在代码中,显示了两种迭代字符串的方法:使用指针和使用 int。指针方式很好,但是没有办法boost::string_ref.substr在指针之间返回,第二种方法使用 int 和 int 可以处理一些数字,对于大型输入文件来说可能很小。

那么是否有可能以这种方式对大量输入进行迭代?

4

1 回答 1

1

要返回给定两个指针的子字符串,请执行以下操作:

return boost::string_ref(begin, end-begin);

只需确保您的参考字符串存在于您要返回的范围内。

于 2013-04-14T01:48:18.197 回答