本文主要介绍了C语言中sscanf()函数使用的详细说明,并增加了一个相关的ACM主题对其进行补充和巩固。有需要的朋友可以参考一下。
SSCCF()-从字符串中读取指定格式的数据。
功能原型:
Int sscanf( string str,string fmt,mixed var1,mixed var2.);
int scanf( const char *format [,argument].);
描述:
Sscanf类似于scanf,用于输入,只不过后者使用screen (stdin)作为输入源,而前者使用固定字符串作为输入源。
其中格式可以是一个或多个{ %[*][width][{ h | l | i64 | l }]type | ' | ' \ t ' | ' \ n ' | non-% symbol }
注意:
1.*也可用于格式中,即%*d和%*s),带星号(*)表示跳过此数据,不读入(即不将此数据读入参数)
2.{a|b|c}表示A、B、C中的一个,【d】表示可能有也可能没有d。
3.宽度表示阅读宽度。
4.{h | l | I64 | L}:参数的大小。通常,H表示单字节大小,I表示2字节大小,L表示4字节大小(双异常),l64表示8字节大小。
5.类型:那很多,就是%s,%d之类的。
6.特殊:%*[width] [{h | l | I64 | L}]type表示满足这个条件的会被过滤掉,不会有值写入目标参数。
支持收集操作:
%[a-z]表示匹配从A到Z的任意字符,greed(尽可能多的匹配)
%[aB']匹配A、B '、贪婪中的一个
% [a]匹配除a以外的任何字符,贪婪
格式
{ %[*][width][{ h | l | l64 | l }]type | ' ' | t ' | \ n ' | not % symbol }
注意:
*可在格式中使用,(即%*d和%*s)标有星号(*),表示该数据被跳过且不被读入。(也就是说,数据不会读入参数)
宽度表示阅读宽度。
{h | l | l64 | L}:参数size,通常H代表单字节大小,L代表2字节大小,L代表4字节大小,l64代表8字节大小。
类型参数类型,例如%s,%d
支持正则表达式,比如%[a-z]匹配A到Z的任意字符(ps:正则表达式这个假期我会写一篇博客记录)
参考用例
#包含stdio.h
#包含stdlib.h
#包含字符串. h
int main()
{
int结果;
字符串[100];
char buf1[255],buf2[255],buf3[255],buf 4[255];
//基本用法
memset(str,0,sizeof(str));
strcpy(str,'我爱中国!');
result=sscanf(str,' %s %s %s ',buf1,buf2,buf 3);
printf('%d\n%s\n%s\n%s\n ',result,buf1,buf2,buf 3);
/**
*实施结果:
* 3
*我
*爱情
*中国!
*可以看出,sscanf的返回值是读取的参数个数。
*/
//读取指定长度的字符串
memset(str,0,sizeof(str));
strcpy(str,' abcdefghijklmnopq ');
sscanf(str,' %5s ',buf 4);
printf('%s\n ',buf 4);
/**
*实施结果:
* abcde
*/
//常规匹配字符串
memset(str,0,sizeof(str));
memset(buf1,0,sizeof(buf 1));
memset(buf2,0,sizeof(buf 2));
memset(buf3,0,sizeof(buf 3));
strcpy(str,' 123456 abcdedfandfs ');
sscanf(str,' %[0-9]%[a-z]%[A-Z]',buf1,buf2,buf 3);
printf('%s\n%s\n%s\n ',buf1,buf2,buf 3);
/**
*实施结果:
* 123456
* abcdedf
*和FS
*很难相信C语言其实是支持正则化的,只是C支持的正则化比较弱。
*/
返回0;
}
九度ac话题
标题描述
标题描述:
有一个记录网络中计算任务执行情况的网络日志。每个计算任务对应于以下形式的日志记录:
“hs_10000_p”是计算任务的名称,
“2007-01-17 19:22:53,315”是计算任务开始执行的时间“YYY-MM-DD: min: sec,ms”
“253.035(s)”是计算任务消耗的时间(秒)。
hs _ 10000 _ p 2007-01-17 19:22:53315253.035(s)
请编写一个程序,对日志中记录的计算任务进行排序。
消耗时间少的计算任务排第一,消耗时间多的计算任务排第二。
如果两个计算任务花费的时间相同,则执行时间较早的计算任务将排在第一位。
输入:
日志中每个记录是一个字符串,每个字符串占一行。最后一行为空行,表示日志结束。日志中最多可能有10000条记录。
计算任务名称的长度不超过10,开始执行时间的格式是YYYY-MM-DD HH:MM:SS,嗯,消耗时间小数点后有三位数字。
计算任务名称与任务开始时间、消耗时间之间以一个或多个空格隔开,行首和行尾可能有多余的空格。
输出:
排序好的日志记录。每个记录的字符串各占一行。
输入的格式与输入保持一致,输入包括几个空格,你的输出中也应该包含同样多的空格。
样例输入:
hs _ 10000 _ p 2007-01-17 19:22:53315253.035(s)
hs_10001_p 2007-01-17 19:22:53,315 253.846(s)
hs_10002_m 2007-01-17 19:22:53,315 129.574(s)
hs_10002_p 2007-01-17 19:22:53,315 262.531(s)
hs_10003_m 2007-01-17 19:22:53,318 126.622(s)
hs _ 10003 _ p 2007-01-17 19:22:53318136.962(s)
hs_10005_m 2007-01-17 19:22:53,318 130.487(s)
hs_10005_p 2007-01-17 19:22:53,318 253.035(s)
hs_10006_m 2007-01-17 19:22:53,318 248.548(s)
hs _ 10006 _ p 2007-01-17 19:25:233673146.827(s)
样例输出:
hs_10003_m 2007-01-17 19:22:53,318 126.622(s)
hs_10002_m 2007-01-17 19:22:53,315 129.574(s)
hs_10005_m 2007-01-17 19:22:53,318 130.487(s)
hs _ 10003 _ p 2007-01-17 19:22:53318136.962(s)
hs_10006_m 2007-01-17 19:22:53,318 248.548(s)
hs _ 10000 _ p 2007-01-17 19:22:53315253.035(s)
hs_10005_p 2007-01-17 19:22:53,318 253.035(s)
hs_10001_p 2007-01-17 19:22:53,315 253.846(s)
hs_10002_p 2007-01-17 19:22:53,315 262.531(s)
hs _ 10006 _ p 2007-01-17 19:25:233673146.827(s)
交流电代码
#包含标准视频
#包含标准库
#包含字符串。h
结构任务
{
字符串[200];
char name[20];
(同Internationalorganizations)国际组织年、月、日、小时、分钟、秒、微;
双倍运行时间;
};
int compare(const void *p,const void * q);
int main()
{
结构任务管理信息系统[10001];
int i,n=0;
memset(mis,0,sizeof(mis));
当(得到(小姐)时.str))
{
if(strcmp(mis[n]).str,' ')==0)
{
打破;
}
sscanf(mis[n].字符串,' %s%d-%d-%d %d:%d:%d,%d %lf ',缺少[n]的缩写.姓名,小姐。年,小姐。月份,小姐。天,小姐。小时,小姐。分钟,小姐。第二小姐,小姐.微,密斯[n]的缩写.运行时);
n;
}
qsort(mis,n,sizeof(mis[0]),compare);
for(I=0;I n;我)
{
printf('%s\n ',mis[i].str);
}
返回0;
}
int compare(const void *p,const void *q)
{
const struct mission * a=p;
const struct mission * b=q;
如果(一个-运行时b-运行时)
{
返回1;
} else if(a-runtime==b-runtime a-year b-year)
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month b-month)
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month==b-month a-day b-day)
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month==b-month a-day==b-day a-hour b-hour)
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month==b-month a-day==b-day a-hour==b-hour a-minute b-minute)
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month==b-month a-day==b-day a-hour==b-hour a-minute==b-minute a-second b-second)
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month==b-month a-day==b-day a-hour==b-hour a-minute==b-minute a-second==b-second a-micro b-micro
{
返回1;
} else if(a-runtime==b-runtime a-year==b-year a-month==b-month a-day==b-day a-hour==b-hour a-minute==b-minute a-second b-second a-micro==b-micro)
{
返回0;
}
其他
{
return-1;
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。