怎样在循环中使用sscanf连续读取某种格式的字符串

现有字符串s[]=“ 2016/10/01 2016/12/23 2017/01/01 .....”,其中的日期形式的子串个数不定
现在想在循环中使用sscanf("%d/%d%d",s,&a,&b,&c)将所有日期形式的数字字符转换为数字
。问题是如何在每一次循环中跳过前面已经截取的字符串。

3个回答

先遍历,然后按空格截取,或者从第三个/后两位处截取

根据你给的日期格式可以知道每个日期的字符串长度都是固定为4+1+2+1+2=10,加上后面的一个空格则为11。

可以利用一个char指针实现偏移然后用sscanf来进行读取


C语言 参考代码


#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[]="2016/10/01 2016/12/23 2017/01/01 2017/02/01";
    char *p=s;  //偏移用字符指针
    unsigned int s_len=strlen(s);   //整个s字符串的长度

    unsigned int a,b,c;
    while(p<s+s_len)  //判断是否已经到s字符串末尾
    {
        sscanf(p,"%d/%d/%d",&a,&b,&c);  //源字符串为p,不是s

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

        p+=11; //偏移到下一个日期
    }
    return 0;
    }

    ```

把字符串输出到文件,再用fscanf函数。

fp=fopen("temp.txt","w+");
fputs(str,fp);
rewind(fp);
while(!feof(fp))
{fscanf(fp,"%s%d",s1,&i);
********}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
怎样使用sscanf函数连续截取字符串
现有char s[]=" 2016/02/20 2016/05/23 2017/01/01 ......"。准备在循环中使用sscanf函数截取日期形式的字符子串,rnsscanf(s,"%d/%d/%d", &a,&b,&c);rn现在的问题是在循环中怎样使sscanf跳过前面已经截取的子串。因为字符串长度可以很长,采用%*s的形式不现实。
VC怎样在循环中存取一系列连续的字符串变量名?
没有使用数组。rn比如我定义了如下变量:rnCString str1,str2,...,str10;rn怎样能在一个循环中引用变量。rn记得VB中可以表示,可以把str和1,2...10等连接起来。rn
continue在循环中的使用
本可称为C语言基础课程,讲解C语言基础入门知识。rn本课程是介绍C语言的基础知识,针对所有对计算机体系结构和嵌入式知识感兴趣的学员。
cvCreateHist在循环中使用
for( v=point_x.begin();v!=point_x.end();v++)rn rnrn left_right=up_down=0;rn int HistogramBins1 = 256,HistogramBins2 = 256;rn float HistogramRange1[2]=0,255;rn float *HistogramRange_u[1]=&HistogramRange1[0];rn float HistogramRange2[2]=0,255;rn float *HistogramRange_d[1]=&HistogramRange2[0];rn CvHistogram *Histogram_up=cvCreateHist(1,&HistogramBins1,CV_HIST_ARRAY,HistogramRange_u);rn CvHistogram *Histogram_down=cvCreateHist(1,&HistogramBins2,CV_HIST_ARRAY,HistogramRange_d);//出错rn rnrn每次运行到第二个直方图初始化的时候就出错,说是内存问题,为什么呢
break在循环中的使用
课程内容:while循环、do while循环、for循环、各类循环的对比、循环的嵌套、break在循环中的使用、continue在循环中的使用。
循环中的异步&&循环中的闭包
在这之前先要了解一下 for循环中let 和var的区别 var 是函数级作用域或者全局作用域,let是块级作用域 看一个例子 function foo() { for (var index = 0; index &amp;lt; array.length; index++) { //..循环中的逻辑代码 } console.log(index)...
在循环中连续发广播会怎么样?
如题,在循环中连续发广播会怎么样? 最近弄个刷新数据功能 存储方式Map> 然后我就想着更新一条数据发一条广播 在循环里面弄n如果不能连续发广播,那还有什么好的办法把数据一起传过去吗?没有经过页面的跳转之类的 只是点击按钮刷新数据在加载出来
在循环中使用事务的问题
OPEN BaseInfo_cursor -- 打开游标,共2条记录rn FETCH NEXT FROM BaseInfo_cursor INTO ... -- 取字段值rn WHILE @@FETCH_STATUS = 0 -- 取游标状态 0-成功rn BEGINrn select @PoolSql = .....rn select @MyErr = 0rn begin transaction @TransNamern Execute(@PoolSql) -- 有错误rn Select @MyErr = @MyErr + @@errorrn update BookBaseInfo set Valid = 0 where ... -- 无错误rn Select @MyErr = @MyErr + @@errorrn if @MyErr <>0 rn rollback transaction @TransName rn elsern commit transaction @TransNamern FETCH NEXT FROM BaseInfo_cursor INTO... -- 取下一条记录字段值rn ENDrnrn整个循环应该执行两次,第一次出现错误,回滚,第二次循环内容就不执行了,什么原因呢?各位大侠帮助分析一下。
javascript 循环中使用匿名函数
一、什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句: [code=&quot;java&quot;] function fnMethodName(x){alert(x);} [/code] 函数字面量(Function Literals): [code=&quot;java&quot;] var fnMethodName = function(x){a...
在循环中使用break语句
本教程从初学者角度出发,通过通俗易懂的语言、丰富多彩的案例,详细介绍了使用Java语言进行程序开发需要掌握的知识包括初识Java、Java语言基础、流程控制、类和对象、封装、继承、多态等。所有知识点都结合具体实际案例进行讲解,涉及的程序代码给出了详细的注释,可以让你快速提高开发技能。
循环中使用Random注意事项
循环调用方法时如果方法中有随机数Random  应采用不在方法中new而是采用传参的形式,因为当循环调用执行速度很快时,会导致每次new出来的Random的种子相同,造成产生的随机数相同    如一定要在循环中写  可将System.currentTimeMills()置换成循环数 i(或不写) 这样生成随机数的种子不同便不会生成相同的随机数
循环中能否使用DrawText
我在循环中使用了DrawText,在同一个位置显示,每次循环总是新的结果覆盖旧的结果.rn那位高手知道如何解决?
fgets在循环中使用出错?!
fgets在循环中使用出错?! 是的,我今天在做程序时,就遭遇了这个问题,严格上来说,这是一个与指针有关的问题。先看看下述代码段: #define LINE_LENGTH 100 void import_file(char* file_path) { int sum = 0; FILE   *fp_r;    FILE   *fp_w;    char   *line;//
循环中使用remove/add
今天在编写MIT实验Poetic Walks的过程中,在循环中为了删除list中的元素,使用了remove方法。在编写测试用例时发现错误。经过学习发现,这是一个从未注意过的误区。 以往使用remove的环境是只在循环中删除list中的某一个元素,那样只需在找到特定元素并删除后break出循环即可。 然而当需要在循环总删除多个元素时这种方法就不行了。 当我们在循环中删除某个元素后,list的大...
循环中使用List.remove的坑
如图,如果在遍历ArrayList的时候涉及到remove, 要记得把i--。 因为当remove()执行后所有元素都向前移动了一格,指针不动就已经是下一个了,再i++的话就会漏掉一个元素,切记!!!
在循环中使用continue语句
本教程从初学者角度出发,通过通俗易懂的语言、丰富多彩的案例,详细介绍了使用Java语言进行程序开发需要掌握的知识包括初识Java、Java语言基础、流程控制、类和对象、封装、继承、多态等。所有知识点都结合具体实际案例进行讲解,涉及的程序代码给出了详细的注释,可以让你快速提高开发技能。
sscanf怎样截取字符串?
[code=C/C++]rnrnhttp://192.168.3.59/cgi-bin/download.cgi?FileList=hello.cgi;get;post;post.cgi;get.cgi;dir.cgi;opendir.cgi&FilePath=rnrnrnsscanf(data,"FileList=%[^&]&FilePath=%s",FileList,FilePath);rnrnprintf("%s\n",FileList); //这样只输出hello.cgi。rn我想得到hello.cgi;get;post;post.cgi;get.cgi;dir.cgi;opendir.cgirn怎样截取?rn[/code]
求助!!stringbuil.append在循环中追加字符串
先上代码rn[code=csharp] StringBuilder Value = new StringBuilder("", 32);rn for (int i = 0; i < e;i++ )rn rn rn int iValue;rn byte[] bs;rn string sValue; rn iValue = Convert.ToInt32(data0[i], 16); // 16进制->10进制rn bs = System.BitConverter.GetBytes(iValue); //int->byte[]rn sValue = System.Text.Encoding.ASCII.GetString(bs); //byte[]-> ASCIIrn Value.Append(sValue);rn MessageBox.Show(Value.ToString());rn rn[/code]rndata0为一个存储十六进制字符串数组,将其转换成对应ASCII码字符,因为要在textbox中不断刷新,所以采用stringbuild先存储字符变量。现在问题是在循环中value.append(sValue)好像始终都为data0[0]的值,无法追加字符。不是循环的问题,如果将stringbuild定义在循环内,数组data0的每个值是可以赋予stringbuild的,但这样是无法追加的。
急急急!!!怎样读取Main()循环中的数据
public static double math()rn rn double result = 0;rn double[] r = read.math(@"E:\1.txt"); //静态类read传递一个数组给math方法,作为计算result的公式系数 rn for (int i = 0; i < r.Length - 1; i++) //循环输出数据rn rn result = r[i] + r[i + 1] * T[i,j];rn rn return result;rn rn 这个方法是利用静态类read传递的数组,为result公式提供系数,而T[i,j]是读取Main()循环中的数据,调试时说错误,rn错误 1 当前上下文中不存在名称“T”rn错误 2 当前上下文中不存在名称“j”rn而T[i,j]中,ij是在循环中定义的局部变量,请问我该怎么办才能调用这个T[i,j]?请指教rn 附注:rnpublic static double math()方法是在Main()中定义的一个方法rnrnrn rn
js在循环中动态传递字符串参数
[img=https://img-bbs.csdn.net/upload/201612/08/1481189000_558068.png][/img]rnrnrnrn如图所示传递,会出现错误信息:rnUncaught SyntaxError: missing ) after argument listrn传递字符串时的格式不知道怎么写,求大侠指教。
List循环中删除元素
普通的循环中是不能删除元素的,如下 import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; public class ListTest { List&amp;lt;...
oracle异常机制(在循环中)
oracle异常机制(在循环中)  入手oracle存储过程不久,一直对他的异常机制半知半解,现在特做一些实验探索oracle异常机制,仅为记录:代码-创建存储过程create or replace procedure AAAA_TEST1 is MY_EXCEPTION1 EXCEPTION;-- 自定义异常1 MY_EXCEPTION2 EXCEPTION;-- 自定义异常2 MY_EXCEPT
循环中的setInterval的问题
rn rnrn似乎i++并非在setInterval之后运行的,请高手赐教,谢谢!
循环中的问题
在循环中能不能使程序处于等待状态,使用户进行若干操作后,再往下执行循环,rn就是如果循环100次,但是在每次中我都要做若干操作,电脑根据我的指令做相应的操作,这个循环怎么写啊?
循环中的界面问题
for (int i = 0; i < m_nFileLength; i++)rnrn m_nBytesSend++;rn UpdateData(FALSE);rn m_DownLoadProgress.SetPos(i);rnrn其中rnm_nFileLength:是文件大小,是个很大的值 > 180000rnm_nBytesSend:和CEdit编辑框控件关联的变量rnm_DownLoadProgress:进度条对象rn为什么在我在进度条跑的时候,点其他的窗口后再回来,整个界面就是白色了,要到循环结束,才能显示界面.应该怎么解决
在循环中嵌套脚本
rn rn.....rn rn.....rn rn这段代码什么意思,为什么加入此代码后速度变的很慢。rn注意,这个Struts循环标签大约循环了1000次,如果有这段代码那么速度就慢,去掉速度就快。
游标循环中if判断语句
[img=http://hi.csdn.net/attachment/201011/1/7744478_12885804209K63.png.thumb.jpg][/img]rnrn@receiver这样在表格中 ,在下面的存储过程中用游标循环,其中在if not exists(select * from MSG_Sentbox where msgTitle=@sentContentrn and Receiver= @str and ActualSendTime >=dateadd(minute,-10,getdate()))rn这里判断的时候,当循环判断到第一个@receiver 在MSG_Sentbox 中已经exists的时候就直接跳出游标的循环了,怎么样才能让它跳过然后继续循环下一个呢?rnrn[code=SQL]rnif exists(select 线路 from Result group by 线路 having count(DISTINCT 号码)>=2) rn --elsern beginrn declare L cursor -- 创建游标 Lrn static rn for select 线路 from Result group by 线路 having count(DISTINCT 号码)>=2rn open L --打开游标rn fetch next from L into @LineNum--提取上次提取行的下一行 rn while(@@fetch_status=0)rn beginrn SET @sentContent='线路' + @LineNum + ':' + '多条塔杆同时收到断电短信,可能为线路停电或电线被盗,请注意确认!'rn declare s cursor -- 创建游标 Srn static rn for select a from dbo.fn_split(@receiver,',')rn open s --打开游标rn fetch next from s into @str --提取上次提取行的下一行rn while(@@fetch_status=0) --循环手机号码,并各自插入到MSG_Outbox中 rn begin rn if not exists(select * from MSG_Sentbox where msgTitle=@sentContentrn and Receiver= @str and ActualSendTime >=dateadd(minute,-10,getdate()))rn -- return -2rn -- elsern beginrn INSERT INTO MSG_Outbox (Receiver,MsgType,MsgTitle,MMSContentLocation,SendTime) VALUES(@str,0,@sentContent,'',getdate())rn fetch next from s into @str rn endrn endrn close s --关闭游标rn deallocate s --删除游标,释放资源 rn fetch next from L into @LineNum rn endrn close L --关闭游标rn deallocate L --删除游标,释放资源rnendrn[/code]rn
循环中的System.Data.SqlClient.SqlDataReade
我有两张表,一张是大项,没有重复,另一张是小项,有重复,每输出一条大项,相应的小项也输出,所以用两层循环,可是System.Data.SqlClient.SqlDataReade只能打开一次,有什么好办法实现两张关联表的查询
循环中的错误处理问题
如以下示例程序:rnPrivate Sub Command1_Click()rn Dim I As Longrn For I = 1 To 10rn On Error GoTo NextLinern rn Err.Raise vbObjectError, , "err " & Irn rnNextLine:rn If Err.Number <> 0 Thenrn Debug.Print Err.Descriptionrn Elsern End Ifrn On Error GoTo 0rn NextrnEnd Subrnrn似乎应该打印出 err1 err2 err3 .... err10 ,但实际上打印出 err1 以后就会抛出一个未处理的错误而导致程序中止,也就是说第一次捕获到错误以后,错误捕获就无法再次捕获错误了,不知道是什么原因,但是如果把 On Error Goto NextLine 改为 On Error Resume Next,则可以捕获到10个错误,请DX指点怎么回事。rn
在'for'循环中获取索引
ints = [8, 23, 45, 12, 78] 当使用循环遍历它时,在这种情况下如何访问循环索引,从1到5? 最普遍的办法是设置索引变量(通常在C或PHP等语言中使用),但这被认为是非python的。 更好的选择是使用Python 2和3中提供的内置函数enumerate() 如果你想获得1-5而不是0-4,则使用start = 1 : for idx, val in e...
在js的循环中绑定事件
在js的循环中绑定事件问题:在循环中绑定事件问题解决:绑定事件放在及时运行函数中 问题:在循环中绑定事件 var allCheckBox= $(".assignmentHouseContent img[src='./resource/images/public/IsNSelect.png']") for(var i = 0; i &lt; allCheckBox.length; i++){ ...
循环中的推进
请输出1~100之间的素数(自定义函数的方法): 一、 >>> def isprime(x): if x == 1: return False k = int(sqrt(x)) for j in range(2,k+1): if x%j == 0: return False else: return True >>> for i in range(1,10
在循环中动态生成变量
while (month_lag &amp;gt;= '201601'):   locals()[&quot;lc_&quot;+month_lag] = get_month_lc(-i)   month_lag = utility.datetime_month_lag(-i)[3]   i=i+1   print('The iter_lc is:', month_lag)通过locals()[&quot;lc_&quot;+month_lag...
解释循环中的递归调用
#include &amp;lt;iostream&amp;gt; void fun(int a) { int i; printf(&quot;%d &quot;,a); for(i=0;i&amp;lt;a;i++) fun(a - 1); } int main(){ fun(3); return 0; }这个程序的运行结果是:3 2 1 0 1 0 2 1 0 1 0 2 1 0 1 0不是太好理解,想理解的话,...
循环中的else语句
本课程会对Python的基础知识做了深入的介绍,如Python模块、声明变量、数字、进制转换、获取用户输入、长字符串等。
循环中的闭包
首先看一段JS代码function F(){ var arr =[],i; for(i=0;i<3;i++){ arr[i] = function(){ return i; } } return arr; } 在控制器中执行 >var arr = F() >arr[0]() >arr[1]() >arr[2]()
循环中的continue
html> html lang="en"> head> meta charset="UTF-8"> title>title> head> body> 语句 停止循环的当前迭代,并开始新的迭代。 continue [label]; 可选的 label 参数指定 continue 应用于哪条语句。 说明: 只能在 while、do...while、for、或 for...in 循
循环中闭包
  &amp;lt;script type=&quot;text/javascript&quot;&amp;gt; function aa(){ var a = []; var i; for (i = 0; i &amp;lt; 3; i++) { a[i] = function(){ ...
循环中的对象创建与初始化
循环中的对象创建(分配内存)只有一次,这应该没有疑问。rn对于初始化,我以前也一直以为只有一次。可试了之后才知道,如果是临时变量,则循环多少次就赋值多少次;如果是静态变量,则只赋值一次。这是为什么?rn谁能总结一下循环中的对象创建与初始化的规律?rn(好像就算用goto跳过了任何对象的创建,该对象还是会被创建?)rnrn[code=C/C++]rnint a = 100;rnint b = 0;rnrnfor (int i = 0; i < a; ++i)rn rn int j = b;rn ++b;rn printf("%d ",j);rn rn[/code]rnrn结果:0 1 2 3...直到99rnrn[code=C/C++]rnint a = 100;rnint b = 0;rnrnfor (int i = 0; i < a; ++i)rn rn static int j = b;rn ++b;rn printf("%d ",j);rn rn[/code]rnrn结果:0 0 0 0...rnrn
动态数组 在循环中 初始化
想在while循环中,Setlength 设置长度,rnrn使用完后setlength(数组名,0);rn报错out of memory.rn不明白,我用完释放,再重新分配内存。rnrn代码如下:rnrnvar rnarraylog:array of char; rn....rnrnwhile(条件) dornbeginrn .......rn 先读取长度lensize//每执行一次,lensize值不同rn try rn SetLength(arraylog,lensize);rn except on e:exception dorn beginrn showmessage(e.Message);rn end;rn end;rnrn ............文件内容读到arraylog数组里。长度
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池