sscanf()函数的用法
生活随笔
收集整理的這篇文章主要介紹了
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); //取出#和@之間的字符
?
? 這樣順便提一下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()函数的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于int main(int argc,
- 下一篇: 二进制位交换,反转,与统计1的个数