拆分字符串并在不同分隔符之前获取值

Posted

技术标签:

【中文标题】拆分字符串并在不同分隔符之前获取值【英文标题】:Split string and get values before different delimiters 【发布时间】: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 我正在尝试我的方式,但没有奏效。当我尝试他的代码时,它起作用了。海什。感谢您的帮助! 【参考方案1】:

我认为你应该阅读一下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;

【讨论】:

以上是关于拆分字符串并在不同分隔符之前获取值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas使用split函数基于指定分隔符拆分数据列的内容为列表设置expand参数将拆分结果列表内容转化为多列dataframe(不设置参数n则列表长度不同较短的列表会出现缺失值)

将字符串拆分为标记并在 Perl 中存储分隔符

MySQL查询将分隔字符串值拆分为单独的列[重复]

使用 WHERE IN SQL 子句将字符串值从单个值拆分为多个值以获取数据

在批处理文件中拆分以逗号分隔的字符串并在循环中调用 sqlplus 函数

R拆分由不同数量的空格分隔的一列字符