(最简单)方法一: 12345678910111213 char s[]="123 ab 4";char *p;char str[10];int num1, num2;void (){ p=s; sscanf(p,"%d %s %d",&num1, str, &num2); printf("num1 = %dn",num1); printf("num2 = %dn",num2); printf("string is %sn",str);} output: 123 num1 = 123num2 = 4string is ab (逐个查找)方法二: 12345678910111213141516171819202122232425 char s[]="123 ab 4";char *p;int v,n,k;void (){ p=s; while (1) { k=sscanf(p,"%d%n",&v,&n); printf("k,v,n=%d,%d,%dn",k,v,n); if (1==k) { p+=n; } else if (0==k) //提取到非数字 { printf("skip char[%c]n",p[0]); p++; } else //EOF==k break; } printf("End.n");} output: 12345678910 k,v,n=1,123,3k,v,n=0,123,3skip char[ ]k,v,n=0,123,3skip char[a]k,v,n=0,123,3skip char[b]k,v,n=1,4,2k,v,n=-1,4,2End. (正则表达式:匹配正负号和小数点)方法三: 1234567891011121314151617181920212223 #include <iostream> #include <string> #include <regex> using namespace std;int (){ regex pattern("-?[0-9]\d*\.[0-9]\d*"); string str_1 = "v -1234.3/234.5/3.4567 3.4/5.6/7.88 67.8/8.901/7.65"; string::const_iterator start = str_1.begin(); string::const_iterator end = str_1.end(); smatch mat; while (regex_search(start, end, mat, pattern)) { string msg(mat[0].first, mat[0].second); cout << msg << endl; start = mat[0].second; } return 0;} output: 123456789 -1234.3234.53.45673.45.67.8867.88.9017.65 赞微海报分享
近期评论