在处理一些具体字符串的时候能用到sscanf
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
int main()
{
char str[100];
char *s;
char s1[100];
char s2[100];
char s3[100];
char s4[100];
int num1;
int num2;
//对sscanf()的理解
int x=sscanf("123456","%4s",str);
printf("str=%s\n",str);
cout<<"x="<<x<<endl;
cout<<endl;
/*
输出结果:
str=1234
x=1
控制的位数
因为str没有确定的值所以在"给定的值"
*/
//一:简单的用法
cout<<"1"<<endl;
s="anhui beijing 123";
int a=sscanf(s,"%s%s%d",s1,s2,&num1);
printf("s=%s\n",s);
printf("a=%d, s1=%s, s2=%s, num1=%d\n",a,s1,s2,num1);
cout<<endl;
/*
s=anhui beijing 123
a=3, s1=anhui, s2=beijing,s3=123
从a=3可知sscanf()的返回值是参数的个数
可以分别给s1,s2,num1赋值是因为有空格的原因
*/
cout<<"2"<<endl;
//二:取指定长度的字符串
s="1234567890";
sscanf(s,"%4s",s1);
cout<<"s="<<s<<endl;
printf("s1=%s\n",s1);
cout<<endl;
/*
s=1234567890
s1=1234
这个和控制位数的输出差不多
可以理解为把s前4个值赋值给s1
*/
cout<<3<<endl;
//取到指定的为止的字符串
s="123/456";
sscanf(s,"%[^/]",s1);
cout<<"s="<<s<<endl;
printf("s1=%s\n",s1);
cout<<endl;
/*
s1=123
*/
cout<<4<<endl;
//取到指定字符集为止的字符串
s="123acbABC";
sscanf(s,"%[^A-Z]",s1);
cout<<s<<endl;
printf("s1=%s\n",s1);
cout<<endl;
/*
s1=123abc
就是碰到A-Z的其中任意字符都要停止把s的值赋值给s1,
*/
cout<<5<<endl;
//取包含指定字符集的字符串
s="0123abcABC";
sscanf(s,"%[0-9]%[a-z]%[A-Z]",s1,s2,s3);
cout<<s<<endl;
printf("s1=%s, s1=%s, s2=%s\n",s1,s2,s3);
cout<<endl;
/*
s1=0123, s2=abc, s3=ABC
如果s=01a23abcABC的话s1=01, s2=a ,s3就是一个乱的结果
*/
cout<<"6"<<endl;
//获取指定字符中间的字符串
s="ios<android>wp10";
sscanf(s,"%[^<]",s1);
cout<<s<<endl;
cout<<"s1="<<s1<<endl;
/*
s1=ios
*/
sscanf(s,"%*[^<]<%[^>]",s2);
cout<<"s2="<<s2<<endl;
/*
s2=android
*/
s="12345acc";
sscanf(s,"%*da%s",s3);
cout<<"s3="<<s3<<endl;
cout<<endl;
/*
s3=cc
如果%*d%s就是acc了
%*s和%*d加了星号(*)表示跳过此数据不读入
也就是不把此数据读入参数中
*/
cout<<7<<endl;
//指定要跳出的字符串
s="iosVSandroid";
sscanf(s,"%[a-z]VS%[a-z]",s1,s2);
cout<<s<<endl;
cout<<"s1="<<s1<<endl;
cout<<"s2="<<s2<<endl;
cout<<endl;
/*
s1=ios
s2=android
中间不叫VS也是正确的
*/
cout<<8<<endl;
//分割以某字符隔开的字符串
s="android-iphone-wp10";
sscanf(s,"%[^-]-%[^-]-%[^-]",s1,s2,s3);
cout<<"s1="<<s1<<endl;
cout<<"s2="<<s2<<endl;
cout<<"s3="<<s3<<endl;
cout<<endl;
/*
和7有点像
s1=android
s2=iphone
s3=wp10
*/
cout<<9<<endl;
//提取邮箱地址
s="Email:beijing@sina.com.cn";
sscanf(s,"%[^:]:%[^@]@%[^.].%s",s1,s2,s3,s4);
printf("s1=%s, s2=%s, s3=%s, s4=%s\n",s1,s2,s3,s4);
cout<<endl;
/*
s1=Email
s2=beijing
s3=sina
s4=com.cn
*/
return 0;
}
本文详细介绍了sscanf函数的各种使用场景,包括基本用法、指定长度的字符串读取、指定字符集的字符串处理等,并通过实例展示了如何高效地解析字符串。
1万+

被折叠的 条评论
为什么被折叠?



