拆分字符串并在不同的分隔符

时间:2015-09-06 07:20:13

标签: c++ string split

鉴于代码:

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

1 个答案:

答案 0 :(得分:0)

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

static class Program
{
    static SplashForm mySplashForm;
    static MainForm myMainForm;
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        //Show Splash Form
        mySplashForm = new SplashForm();
        if (mySplashForm != null)
        {
            Thread splashThread = new Thread(new ThreadStart(
                () => { Application.Run(mySplashForm); }));
            splashThread.SetApartmentState(ApartmentState.STA);
            splashThread.Start();
        }
        //Create and Show Main Form
        myMainForm = new MainForm();
        myMainForm.LoadCompleted += MainForm_LoadCompleted;
        Application.Run(myMainForm);
        if(!(mySplashForm == null || mySplashForm.Disposing || mySplashForm.IsDisposed))
            mySplashForm.Invoke(new Action(() => { 
                mySplashForm.TopMost = true; 
                mySplashForm.Activate(); 
                mySplashForm.TopMost = false; }));
    }
    private static void MainForm_LoadCompleted(object sender, EventArgs e)
    {
        if (mySplashForm == null || mySplashForm.Disposing || mySplashForm.IsDisposed)
            return;
        mySplashForm.Invoke(new Action(() => { mySplashForm.Close(); }));
        mySplashForm.Dispose();
        mySplashForm = null;
        myMainForm.TopMost = true; 
        myMainForm.Activate(); 
        myMainForm.TopMost = false;
    }
}

我有一个问题需要了解你真正想要实现的目标。假设这是使用Searches the string for the first character that matches any of the characters specified in its arguments. 函数的一个示例。

find_first_of