如何快速解析以分号相隔的字符串?

原始需求就是如何解析形如:
"a,b,c,1,21,2"这样的字符串?
我尝试了sscanf等方法,也在sscanf中使用了正则表达式,但是发现如果上述字符串有空值时(就是"a,b,c,1,21,2"是"a,b,c,,,2"),就不能正确解析。
目前我是这样做的:
sub = a.substr(0,a.find_first_of(","));
item->Setbase_type(atoi(sub.c_str()));
a = a.substr(sub.length()+1);
循环。。

这种方法可以定位到“,”,当“,”前面为空的时候也能得到空串而不是异常。

问题是,当数据比较大,有四五十个“,”间隔时,代码量很大。
有没有什么简单的方法来解析?

谢谢了!

0

4个回答

楼主是要这种吗

 #include<iostream>
#include<string.h>
using namespace std;

void main()
{
    string str = "a,b,c,,1,21,2,";
    char buffer[32] = {0};
    while(1)
    {
        sscanf(str.c_str(), "%[^,]", buffer);
        cout << buffer << endl;
        if(str.length() >= 1 + strlen(buffer))
            str = str.substr(1 + strlen(buffer));
        else
            break;
        memset(buffer, 0, 32);
    }
}

图片说明

0
qq423399099
小灸舞 回复zhaobey: 结构体的成员变量不能改一下?除此之外我也无能为力了
3 年多之前 回复
zhaobey
zhaobey 回复小灸舞: 结构体里面是成员变量比如aaa bbb,你说怎么把这个放在循环里面去赋值?循环里面的名字应该是有规则的吧。
3 年多之前 回复
qq423399099
小灸舞 回复zhaobey: 楼主的结构体里难道有char buffer1[]到char buffer50[]?
3 年多之前 回复
zhaobey
zhaobey 回复小灸舞: 我是要放在一个结构体的变量里面,赋值用循环没法弄
3 年多之前 回复
qq423399099
小灸舞 回复zhaobey: 取值不是就上面那几行代码吗,用vector的话cout那句改成push_back就可以了,之后赋值的话也可以循环赋值啊,不用赋一个值就写一行吧
3 年多之前 回复
zhaobey
zhaobey 回复小灸舞: 这样也可以,只是,一行可能有五十个逗号。然后按照你说的操作的话,也 至少需要50*2行代码(50个取值,50个赋值)。我是在想,直接一行正则表达式行不行
3 年多之前 回复
qq423399099
小灸舞 回复zhaobey: 先截取下来,然后放到数组或者vector里,再拿出来不是一样吗?
3 年多之前 回复
zhaobey
zhaobey 如果我想一次性截取所有段的话,就要写成sscanf(str.c_str(), "%[^,],%[^,],%[^,],%[^,]", buffer1,buffer2,buffer3,buffer4);这种形式了,但是此时如果“,“之间没有内容的话,就读取失败,后面正常的数据也不会读取。如"a,b,,1,2,3",后面的”123“也不会读取。
3 年多之前 回复
zhaobey
zhaobey 如果我想一次性截取所有段的话,就要写成sscanf(str.c_str(), "%[^,],%[^,],%[^,],%[^,]", buffer1,buffer2,buffer3,buffer4);这种形式了,但是此时如果“,”
3 年多之前 回复

正则表达式“,"换成",+"

0
zhaobey
zhaobey 方便说得更详细些吗
3 年多之前 回复

char *s = "aaa,,ccc,ddd";
char a[32] = {0},b[32] = {0},c[32] = {0},d[32] = {0};

//sscanf(s, "%s,%s,%s,%s\n", a, b, c, d);



sscanf(s, "%[^,],%[^,],%[^,],%s", a, b, c, d);
printf("[%s][%s][%s][%s]\n", a, b, c, d);

输出a有值 bcd没有值 为什么
0
 char *s = "aaa,,ccc,ddd";
char a[32] = {0},b[32] = {0},c[32] = {0},d[32] = {0};

//sscanf(s, "%s,%s,%s,%s\n", a, b, c, d);



sscanf(s, "%[^,],%[^,],%[^,],%s", a, b, c, d);
printf("[%s][%s][%s][%s]\n", a, b, c, d);

输出a有值 bcd没有值 为什么
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
有分号;隔开的字符串的拆分,合并,读取
string m_strDirPath="美女;帅哥;男人;女人"rnstring[] strDirPath = m_strDirPath.Split(';');rnforeach (string str5 in strDirPath)rn {rn     this.AddDocFileItemByDrop(str5, selectedDocType);rn     if(textbox1.tex
c++基础之STL函数strtok以逗号和分号切割字符串为数字
前几天做头条笔试合并重复区间需要用到从带有逗号和分号的字符串中提取出数字nn比如从字符串:  &quot;1,10;32,45&quot;中提取出数字1,10,32,45nn需要用到STL 库函数strtoknn使用如下:nnnnnnnn需要注意的几点:nn1、sscanf用来把指针指向的内容存到数组中nn2、16行如果写成:char* s=str.c_str();不加char*强制转换的话会报错:nnnn因为此时的...
Python实现按逗号分隔列表。
方法一:rn def commaSpiltList(self, listData):n listData = list(listData)n strs = str(listData[0])n for letter in range(1, len(listData) - 1):n strs = strs + ',' + str(l
Java List转成使用分隔符分隔的字符串
nJava List转成使用分隔符分隔的字符串rn rnorg.apache.commons.lang.StringUtils.join(list.toArray(),separator); rn n
hive函数spilt中分号";"作为分隔符报错的问题解决
hive函数spilt中分号”;”作为分割符报错的问题解决hive表中有一列值,是以;分割的,使用sql语句在hub中查询,会报一下异常:selectn totalprice,n email nfromn prd_updated.ecom_ms_order_udl m lateral view explode(split ( m.p_ccemailaddress,n ';')) adtabl
Hive 字符串中分号的处理
n n n 在使用函数处理字符串时,如果字符串中有分号,则会遇到问题,因为分号是SQL的默认结束符,在HDFS中识别不了,需要使用\073来表示,示例如下:nselect str_to_map('16:1;21:1;6:1;26:1;11:1;31:1','\073',':')nnn n nn...
c# 字符串拆分 ;c# 中字符串中的分号用逗号替换;SQL Server 字符串中的分号用逗号替换
1、string[] ids = extData.Split(new char[] { ';' });2、extData.Replace(&quot;;&quot;, &quot;','&quot;); string.Format(strSQL, extData.Replace(&quot;;&quot;, &quot;','&quot;))3、 select (select '''' + replace('8ae89512-4e5a-e811-93f3-00155d8020...
[oracle]逗号(或分号等)间隔的列,按这一列劈分后转多行
今天遇到个需求,要匹配两个表, 但是关联的字段,在另一个表中是放在一个字段中用分号分割的rnrn怎么全部匹配呢?rnrn后来在网上搜到了, 记录下rnrnrnrnSELECT cp.ES_EXTNUMBER,rnrn cp.ES_AGENTID,rnrn cp.ES_CHSTATESTR,rnrn (sysdate-cp.ES_STARTDATETIM...
hive中对带分号的字符串做split分割
直接对字段进行split(';')操作会报错,其原因是因为:分号默认是sql的结束字符,因此需要用分号的二进制\073来表示。nn如果此时对字段进行此操作是没有问题的,比如:nnn-- column1里的字符串是以分号分割的nselect split(column1,'\073') from xxxnn但是如果是以字符串进行尝试还是会报错,比如:nnnselect split('aa;bb;cc'...
mysql如何进行以,分割的字符串的拆分
现有如下需求:需要将字符串n1,2,3,4,5,6,7n拆分成n1n2n3n4n5n6n7nnn分析:n为了完成上述功能,在mysql中提供了一些字符串操作的函数,其中SUBSTRING_INDEX(str, delim, count)nstr: 要处理的字符串ndelim: 分割符ncount: 计数 如果为正数,则从左开始数,如果为负数,则从右开始数
如何动态解析 多个以逗号隔开的字符串到 oracle中 in( ) 函数里面
SQL语法:nSELECT REGEXP_SUBSTR(‘1,2,3’, ‘[^,]+’, 1, LEVEL) FROM DUALnCONNECT BY REGEXP_SUBSTR(‘1,2,3’, ‘[^,]+’, 1, LEVEL) IS NOT NULLn其中 ‘1,2,3’ 代表该字符串nn
java正则表达式 分段解析字符串使用(.*?)(?=)
例子:package com.h3c.pattern;import java.util.regex.Matcher;nimport java.util.regex.Pattern;public class Test { public static void main(String[] args) {n /*String filetext = "//@张小名: 25分//@李小花
关于字符串的分隔,正则表达式
一直认为Java的输入处理起来不方便,当今天看到正则表达式,发现有些问题就可以迎刃而解了,啦啦啦:rn下面是我在网上看到的帖子与回帖,稍微整理了一下:rn昨天看到有人用rnstr.split("\\s+")rn今天又看到rn"420348092".matches("\\d+")rnrn"fajsdkfjaskdfj".matches("\\w+");rn请问这些  "//什么的" 是什么东西?rn
java List转数组,转逗号间隔的字符串
List转数组,转逗号间隔的字符串rnrnrnList topicList = XXX;nString labelStr = StringUtils.join(topicList.toArray(),","));rnrnrnrnrnrnrn数组转listrnrnString customerLabel = "xxx,xxx";rnrnrnCollectionUtils.arrayToList(cu
sqlserver存储过程中分隔长字符串
发这贴主要是混点分,因为不满30分不能在海版回复…… :lol: rn下面说的这个简单点举例说明吧,例如我们发表一篇文章,通常会再缀上几个标签。这时候通常的做法就是先连接数据库,往文章表插一条数据,然后循环再把标签插入文章标签表。rn我打算全用存储过程来实现,传入的参数类似:文章标题、内容、作者、标签(用'|'分隔、等其他字段)rn有个比较棘手的问题,就是将标签这个长字符串分隔成若干标签,循环插入...
windows上处理分号分割的CSV格式文件
windows上处理分号分割的CSV格式文件nwindos上默认的csv格式文件是用逗号分割的,当遇到以分号分割的csv文件时候,用Excel打开,所有数据会全部挤到最左侧的一列(如图):nnn处理的时候也非常不方便,这时候只要把CSV格式(以分号分割的)转化成以逗号分割的就可以了。n一个比较简单的方法是,把文件传到ipad上,用ipad上自带的Number表格打开,可以正常打开,转化成excel...
c++如何分割带有逗号的字符串
前提:存在一个字符串,里面有string,int等类型,使用stringstream方法去分割字符串。nnnn#include n#include nnvector stu;nstring ss;ncin >> ss;nnstringstream sstr(ss);nstring token;nint be=0;nwhile(getline(sstr, token, ','))n{
hive中分号字符引起的异常
在使用正则表达式时候解析数据时候,由输入带有分号的字符串引起的异常错误rnselect regexp_extract(reflect("java.net.URLDecoder", "decode", event),';price=(\\d+-\\d+)(&|;)',1) from page_url;nnselect ';price=(\\d+-\\d+)(&|;)';nrnhive日志中报出字符异
Eclipse快速补全行末分号
Eclipse快速补全行末分号nnEclipse快捷键跳到行末补全分号nnEclipse快速结束当前语句(在行末加上分号,就是当前语句结束)nnIntellij IDEA 里是有快速补全分号的功能(快捷键:Complete Current Statement)的nn用惯了这个功能,发现Eclipse里没有,感觉很不习惯nn网上找了很久,终于找到了解决方法:安装插件(很简单)nn来源:https:/...
批处理 字符串分割
批处理 字符串分割 实例rn使用for命令可以对字符串进行分段处理。rn分割字符串rn@echo offrn::定义一个以分号作为分隔的字符串rnset str=AAA;BBB;CCC;DDD;EEE;FFFrn::str的副本rnset remain=%str%rn:looprnfor /f &quot;tokens=1* delims=;&quot; %%a in (&quot;%remain%&quot;) do (rn ::输出第一个分段(令牌)rn...
js验证多个用分号隔开的邮箱
html:nn&amp;lt;body style=&quot;text-align: center;&quot;&amp;gt;n    &amp;lt;h1&amp;gt;电子邮件地址验证程序&amp;lt;/h1&amp;gt;n    请输入电子邮件地址:&amp;lt;input id=&quot;email_address&quot; type=&quot;text&quot; style=&quot;width: 300px;&quot; /&amp;gt;&amp;lt;br /&amp;g
字符串以.作为split()的分割符
当以.(点号)作为String.split()的分割符时,表达式不应该写成String.split(&quot;.&quot;),因为点号在正则表达式中由特殊含义,所以此处应该用转义字符String.split(&quot;\\.&quot;)。...
ORACLE将用逗号隔开的某一条数据,转化为多条
Select a.*,n regexp_substr(POST_USEE_DEPT, '[^,]+', 1, level) POST_USEE_DEPT_FEN n from SM_POST anconnect by level &amp;lt;= regexp_count(POST_USEE_DEPT, ',') + 1n and SM_POST_ID = prior S...
字符串分割split:将一个字符串通过指定的分隔符分割成若干子串
1.先来看一下JAVA里的字符串分割代码:nn首先从标准输入得到一行数据,数据之间用逗号,分隔。nn将这行数据存为字符串,然后调用字符串分割函数split将其分割成字符数组String [] strRating,在定义一个整型数组,将字符数组转换成整数数组:nnnnimport java.util.Arrays;nimport java.util.Scanner;nnpublic class Ma...
oracle的分号和斜杠(转)
nnrnnnrnrnn引用n1. Adding a slash to the end of each statement was a bad choice because sqlplus treats slash as a buffer flush. For procedure/triggers/functions it is a must: because content of if is st...
java以逗号为分割符拼接字符串
List licenseNumList = enterpriseMapper.selectLicenseNumsByCompanyName(companyName);nif (licenseNumList.size() &gt; 1) {nStringBuffer sb = new StringBuffer();nfor (String license : licenseNumList) {nsb...
JS中同时支持切割中英文符号,例如分号,冒号
代码实现如下rnvar mark = params.substring(params.indexOf("序列号"));n n var paramsList = mark.split(":");n var newlist = new Array();n for(var i = 0 ; i<paramsList.length;i++){n //判断是否包含中文分号,如果包含再次切割;n if
js如何截取以逗号隔开的字符串
使用string对象的split()方法可以处理。n例如:nvar yourString=“12,25,24,234,234,”;nvar result=yourString.split(",");nfor(var i=0;i<result.length;i++){n document.write(result[i]);n}n nsplit使用方法如下:n nstringObject.split
以分号分隔的字符串的正则表达式
格式 如:2111111;3334344;343434334;rn
MFC中分割字符串
声明:nnnint SplitString(const CString str, std::vector&amp;lt;CString&amp;gt; &amp;amp;vecString, const CString&amp;amp; strSplit = _T(&quot;,&quot;));nn定义:nnnint SplitString(const CString str, std::vector&amp;lt;CString&amp;gt; &amp;amp;ve...
php分号问题
在php开始过程中,有看到句末用分号,又有看到不要分号的。有时不用分号可以,有时不用分号又报错了,这到底是怎么回事呢?n其实是这样的:在php中,各个语句使用分号隔开。n这句话里面有这么几个意思:n1、只有一句的,不需要分号。n2、有多句的,每两个语句之间需要分号。n3、最后一句后面不需要分号。...
IDEA自动补全当前语句的分号
Ctrl + Shift + Enter
mysql数据库中某个字段的数据为分号分割的数据,将该数据拆分成多行
SELECT count(id) AS counts ,TITLE, CODE, chaifenFROM ( SELECT t.CODE, t.TITLE, t.ID, substring_index( substring_index( t.CODE, ';', b.help_topic_id + 1 ), ';', - 1 )...
GET请求中参数分隔符分号(;)和and符(&)分隔参数的区别
GET请求中参数分隔符分号(;)和and符(&)分隔参数的区别nnn       在开发项目或梳理某个项目的程序代码时,我们很可能会看到很多请求以及请求后面的参数列表。这时,有可能会遇到请求后面的参数之间使用分号(;)或and符(&)分隔的情况,有时候很多小伙伴看到这个会有些疑惑,不知道这两个符号到底有什么区别,那么这篇文章利用一个简单的例子来帮大家排除疑惑,权当抛砖引玉。希望大家在平时的工
shell将分号替换成空格
将video.txt中的所有的:替换成空格nawk '{gsub(":"," "); print $0 }' video.sort
go语言中换行和分号那点事------理解为什么
       来看一个最简单的go程序:nnnpackage mainnnimport (n &quot;fmt&quot;n)nnfunc main() {n fmt.Println(&quot;hello world&quot;)n}nn       main函数的左花括号必须在main同行,否则出错。 我刚开始从c/c++转go的时候, 觉得很别扭, 其实, 习惯了就好。 为什么go的先驱们要这么玩呢?  这是为了在语...
Eclipse增强自动补全,取消“=”等号, “;”分号和空格自动输入,添加Tab输入
Eclipse IDE Version: 2018-12 (4.10.0)n对应:org.eclipse.jface.text_3.15.0.v20181119-1708.jarn打开eclipse依次点击Window --&amp;amp;gt; Perferences --&amp;amp;gt; Java --&amp;amp;gt; Editor --&amp;amp;gt; Content Assist,nnn在【Auto activation tr...
选择相关的标签(多个标签用分号隔开)
n1、htmln &amp;lt;div class=&quot;w-section&quot;&amp;gt;n &amp;lt;h3&amp;gt;欢迎进入&amp;lt;/h3&amp;gt; n &amp;lt;div class=&quot;section-base&quot;&amp;gt;n &amp;lt;h3&amp;gt;请选择相关的标签并选择系统&amp;lt;/h3&amp;gt;n &amp;lt;div class=&quot;section-k
vscode 实现在行尾加分号
 macros 在扩展中下载nn Settings 中编写自定义 macro:nnn&quot;macros&quot;: {n &quot;end_semicolon&quot;: [ // 末尾加分号n &quot;cursorLineEnd&quot;,n {n &quot;command&quot;: &quot;type&quot;,n ...
JS去除字符串逗号隔开的每个字符
JS去除字符串逗号隔开的每个字符n话不多说,直接上图nn上图是已经去除数组重复的值n实现方法nvar ss = &amp;quot;成都,成都,北京,上海,天津,深圳,重庆,上海,杭州,西藏,长春,济南,杭州&amp;quot;.split(&amp;quot;,&amp;quot;);n var kmArr = [];n for(var i = 0;i&amp;amp;lt;ss.length; i++){n var isC = false;//是否存在(...
文章热词 CAVLC系数矩阵解析 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 如何快速学python 如何快速学习python