2015-09-06 119 views
-1

之前得到的值:分割字符串,并给予代码不同的分隔符

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); 
    } 
+0

在你想要得到的例子中,while循环缺失。这是故意的吗?如果是的话,你的确切标准是什么来解析代码? – honk

+0

@honk对不起,如果我不清楚。这只是我想要的东西的一个例子。同时也包括在内。我现在已经成功地将它们分开了,现在正试图将它放在一个列表中。 – user3453250

+0

User @ user3188346建议在他的回答中使用'find_first_of'函数。这应该可以帮助你保持线条的顺序。你尝试过吗? – honk

回答

0

我认为你应该阅读约std::string::find_first_of function

Searches the string for the first character that matches any of the characters specified in its arguments. 

我有一个问题,要了解你真正想要达到的目标。假设这是find_first_of函数使用的一个例子。

list<string> split(string lines) 
{ 
    list<string> result; 
    size_t position = 0; 

    while((position = lines.find_first_of("{};\n")) != string::npos) 
    { 
     if(lines[position] != '\n') 
     { 
      result.push_back(lines.substr(0, position+1)); 
     } 
     lines = lines.substr(position+1); 
    } 

    return result; 
}