sscanf()函数的用法

sscanf与scanf类似,都是用于输入的,只是后者以键盘为输入源,前者以固定字符串为输入源。
 
sscanf()函数返回值是int型,代表有多少个变量被赋值了。
 
比如有些题目中有这样的输入:2012:12:20:Monday,现在要把它们提取出来分别处理,那么用sscanf()就很方便了。
 
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

char str[25];
char S[25];

int main()
{
    int y,m,d;
    while(cin.getline(str,25))
    {
        sscanf(str,"%d:%d:%d:%s",&y,&m,&d,S);
        cout<<y<<" "<<m<<" "<<d<<" "<<S<<endl;
    }
    return 0;
}

 
这样顺便提一下cin.get()和cin.getline()都是C++中用来读取字符串的方法。
 
其中里面的参数形式表现为cin.get(str,len)或cin.getline(str,len),len为读取的字符串的最大长度。它们都可以读 取含有空格的字符串。
 
 
注意cin.get()在读取字符串后如果按下回车,那么此时的回车这个字符进入缓冲区,并不会被抛弃,所以就相当于C语言中 的%c输入字符按下回车后一样。而对于cin.getline()可以过滤回车,跟C语言中的gets()一样。
 
 
在sscanf()中,如果指定格式为%*d,%*s等等,那么此项被表示跳过不读。
 
另外sscanf()还可以指定输出,而且支持正则表达式,比如:
 
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);        //读取仅包含数字和小写字母的字符
sscanf("123456 abcdedf", "%[^ ]", buf);                //遇到空格就停止读取
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);          //遇到大写字母就停止读取
sscanf("12345#6abcdedfBCD@EFf", "%*[^#]#%[^@]", buf);  //取出#和@之间的字符

 
 

你可能感兴趣的:(sscanf()函数的用法)