C语言中的sscanf()函数使用详解
sscanf() - 从一个字符串中读进与指定格式相符的数据. Int sscanf( string str,string fmt,mixed var1,mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明:
{%[*] [width][{h | l | l64 | L}]type | ' ' | t' | 'n' | 非%符号}
*可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入。(也就是不把数据读入到参数中) 参考用例
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int result; char str[100]; char buf1[255],buf2[255],buf3[255],buf4[255]; //基本用法 memset(str,sizeof(str)); strcpy(str,"i love china!"); result = sscanf(str,"%s %s %s",buf1,buf2,buf3); printf("%dn%sn%sn%sn",result,buf3); /** * 执行结果: * 3 * i * love * china! * 可以看出,sscanf的返回值为读取的参数个数 */ //读取指定长度的字符串 memset(str,"abcdefghijklmnopq"); sscanf(str,"%5s",buf4); printf("%sn",buf4); /** * 执行结果: * abcde */ //正则匹配字符串 memset(str,sizeof(str)); memset(buf1,sizeof(buf1)); memset(buf2,sizeof(buf2)); memset(buf3,sizeof(buf3)); strcpy(str,"123456abcdedfANDFS"); sscanf(str,"%[0-9]%[a-z]%[A-Z]",buf3); printf("%sn%sn%sn",buf3); /** * 执行结果: * 123456 * abcdedf * ANDFS * 很难相信c语言竟然支持正则,不过c支持的正则挺弱的 */ return 0; }
题目描述:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct mission { char str[200]; char name[20]; int year,month,day,hour,minute,second,micro; double runtime; }; int compare(const void *p,const void *q); int main() { struct mission mis[10001]; int i,n = 0; memset(mis,sizeof(mis)); while(gets(mis[n].str)) { if(strcmp(mis[n].str,"") == 0) { break; } sscanf(mis[n].str,"%s%d-%d-%d %d:%d:%d,%d %lf",mis[n].name,&mis[n].year,&mis[n].month,&mis[n].day,&mis[n].hour,&mis[n].minute,&mis[n].second,&mis[n].micro,&mis[n].runtime); n ++; } qsort(mis,n,sizeof(mis[0]),compare); for(i = 0; i < n; i ++) { printf("%sn",mis[i].str); } return 0; } int compare(const void *p,const void *q) { const struct mission *a = p; const struct mission *b = q; if(a->runtime > b->runtime) { return 1; }else if(a->runtime == b->runtime && a->year > b->year) { return 1; }else if(a->runtime == b->runtime && a->year == b->year && a->month > b->month) { return 1; }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day > b->day) { return 1; }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour > b->hour) { return 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) { return 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) { return 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) { return 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) { return 0; } else { return -1; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |