我正在写一个像tokenizer一样的东西。
我想使用boost::string_ref
返回“令牌值”。
我想通过char遍历string_ref读取char,然后返回包含值的子字符串。
让我们来看看非常简约的例子:
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
,第二种方法使用ints和int可以处理一些数字,对于大型输入文件来说可能很小。
那么可以通过这种方式迭代大输入吗?
答案 0 :(得分:1)
要返回给定两个指针的子字符串,请执行以下操作:
return boost::string_ref(begin, end-begin);
请确保您的参考字符串存在于您要返回的范围内。