我想知道一种方法来检索嵌套在一串字符中的每个括号的内容。
这是一个非常基本的例子:
([Last group]([Second group]([First group])))
更清楚地看到:
(c(b(a)))
从那里开始,我想把内容放在一个向量中,这里是模式:
[0]: a
[1]: b
[2]: c
我实现了几个代码,包括这个代码:
std::vector<std::string> GetEachParenthesisContent(std::string str) {
//str = "(c(b(a)))";
using namespace std;
int level = 0;
int Depth = MaxDepth(str); // Gets the number of parenthesis groups (in example --> 3)
vector<string> ret; // will be returned
string tmp;
for (int i = 0; i < str.length(); ++i) {
char curr = str[i];
switch (curr){
case '(':
if (level < Depth) {
++level;
continue;
}
if (level >= Depth)
tmp += curr;
break;
case ')':
if (level < Depth) {
++level;
continue;
}
if (level >= Depth) {
tmp += curr;
ret.push_back(tmp);
tmp.clear();
}
break;
default:
tmp += curr;
break;
}
}
return ret;
}
结果:
cba)
)
)
此代码不起作用,但不是因为缺少在互联网上搜索! 我不认为我离开了#34;坏&#34;但是,即使我的代码不起作用,我认为达到结果的原则必须相似,但显然更好。
我也尝试过使用正则表达式的方法,但我意识到这是不可能的。
因此,我请求你的帮助。
PS:如果我误解了论坛,标题,内容,我提前道歉......我在发布之前阅读了规则:)
答案 0 :(得分:0)
这不是一个完整的解决方案,而是一个如何解决问题的想法。我使用<div class="row" fxFlex="basis">
<div class="col-xs-12 col-sm-12 p-small-text">
{{app._description}}
</div>
</div>
<div class="row" style="border: 1px solid black;" fxFlex="grow">
<div class="col-xs-12 col-sm-12">no content</div>
</div>
<div class="row p-row-top-padding" fxFlex="basis">
<div class="col-xs-12 col-sm-12">dynamic content</div>
</div>
在括号打开时上升一个级别,在关闭时下降一个级别。随意进一步修改:
std::stack
#include <iostream>
#include <string>
#include <stack>
int main()
{
std::stack<std::string> st;
std::string s = "(a(b(c)))";
for (char const c : s)
{
if (c == '(')
{
st.push(std::string(&c, 1));
continue;
}
st.top() += c;
if (c == ')')
{
std::cout << st.top() << std::endl;
st.pop();
}
}
}
答案 1 :(得分:0)
您可以使用正则表达式轻松完成此操作。
std::string str = "(c(b(a)))";
std::smatch match;
std::regex exp(R"(\w+)");
std::stack<std::string> s;
while (std::regex_search(str, match, exp))
{
s.push(match.str());
str = match.suffix();
}
while (!s.empty())
{
std::cout << s.top() << std::endl;
s.pop();
}
输出:
a
b
c