c – 递归传递一个字符串而不重新创建
作者:互联网
我在这里回答了一个问题:https://stackoverflow.com/a/28862668/2642059我需要使用重复来逐步执行字符串.我想使用一个const字符串&作为我在每个函数上的参数,但除非我想重建字符串每次递归,我发现我需要传递一个开始和结束位置以及字符串本身.所以传递字符串变得毫无意义.
最后,我选择只传递一个指向char []的开始和结束指针.
举个例子,假设我给了一个包含嵌套括号的字符串(但没有并排的括号插入.)所以这样:
(abc(def(ghi((j)klm)nop)qrs)tuv)wxyz
但不是这样的:
(abc(def)(ghi)(j)(klm)(nop)(qrs)tuv)wxyz
我想编写一个递归程序来提取最深嵌套括号中的字符串.就像是:
string foo(const string& bar){
auto start = bar.find('(') + 1;
return start == string::npos + 1 ? bar : foo(bar.substr(start, bar.find_last_of(')') - start));
}
但是,我很不高兴为foo的每次重复重建一个字符串.另一种方法是在链接示例中传递开始和结束指针(或传递string :: const_iterators.)
是否有一个包装器或允许我使用字符串功能但不重建字符串的东西?
解决方法:
string_view
从图书馆基础知识TS可能是一个想法,在GCC中可以获得支持.
界面几乎与字符串相同
#include <experimental/string_view>
using std::experimental::string_view;
string_view foo(const string_view& bar){
auto start = bar.find('(') + 1;
return start == string_view::npos + 1 ? bar : foo(bar.substr(start, bar.find_last_of(')') - start));
}
最后一行也可以
return start ? foo(bar.substr(start, bar.find_last_of(')') - start)) : bar;
虽然他们都非常神秘.
标签:char-pointer,c,string,recursion,construction 来源: https://codeday.me/bug/20190928/1825574.html