【发布时间】:2015-09-06 07:20:12
【问题描述】:
给定代码:
procedure example {
x=3;
y = z +c ;
while p {
b = a+c ;
}
}
我想使用分隔符{、; 和} 来拆分代码。
拆分后,我想将它之前的信息与分隔符一起获取。
例如,我想得到procedure example {、x=3;、y=z+c;、}。然后我想把它推到list<pair<int, string>> sList。有人可以解释一下如何在 C++ 中做到这一点吗?
我尝试按照以下示例进行操作:Parse (split) a string in C++ using string delimiter (standard C++),但我只能获得一个令牌。我想要整条线。我是c++新手,列表、拆分等比较混乱。
编辑:所以我已经实现了,这是代码:
size_t openCurlyBracket = lines.find("{");
size_t closeCurlyBracket = lines.find("}");
size_t semiColon = lines.find(";");
if (semiColon != string::npos) {
cout << lines.substr(0, semiColon + 1) + "\n";
}
但是,好像不能根据分号分开,openBracket和closeBracket。任何人都知道如何根据这些字符单独分开?
第二次编辑: 我已经做到了(下面的代码)。它分离正确,我有一个用于打开大括号的。我正计划将值添加到下面评论区域的列表中。但是,当我想到它时,如果我这样做,那么列表中的信息顺序就会混乱。因为我有另一个基于开放大括号分隔的while循环。关于如何在订单中添加信息的任何想法?
Example:
1. procedure example {
2. x=3;
3. y = z+c
4. while p{
等等。
while (semiColon != string::npos) {
semiColon++;
//add list here
semiColon = lines.find(';',semiColon);
}
【问题讨论】:
-
在您想要获得的示例中,缺少
while循环。这是故意的吗?如果是,您解析代码的确切标准是什么? -
@honk 对不起,如果我不清楚。这只是我想要的东西的一个例子。 while 也包括在内。我现在已经成功地把它们分开了,现在正试着把它放在一个列表中。
-
用户@user3188346 建议在他的回答中使用
find_first_of函数。这应该可以帮助您保持行的顺序。你试过了吗? -
@honk 我正在尝试我的方式,但没有奏效。当我尝试他的代码时,它起作用了。海什。感谢您的帮助!