拆分字符串并在不同分隔符之前获取值
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则列表长度不同较短的列表会出现缺失值)
使用 WHERE IN SQL 子句将字符串值从单个值拆分为多个值以获取数据