SSCANF与STRINGSTREAM函数的用法总结

合集下载

sscanf()用法详细介绍

sscanf()用法详细介绍

sscanf()用法详细介绍1.名称函数原型:int sscanf( const char *, const char *, ...);int sscanf(const char *buffer,const char *format,[argument ]...);buffer存储的数据format格式控制字符串argument 选择性设定字符串sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。

2.头文件#include<stdio.h>3.返回值成功则返回参数数目,失败则返回-1,错误原因存于errno中。

经多次测试,在linux系统中成功返回的是全部参数值减2,例如:sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf的数量(总参数个数减前两个)。

(注意:此处buf均为地址)4.说明sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

第二个参数可以是一个或多个{%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}注:1、* 亦可用于格式中, (即%*d 和%*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

3、width表示读取宽度。

4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节size,L表示4字节size(double例外),l64表示8字节size。

5、type :这就很多了,就是%s,%d之类。

6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值失败返回0 ,否则返回格式化的参数个数5.支持集合操作%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配),在keil mdk中不支持“a-z”这种写法%[aB'] 匹配a、B、'中一员,贪婪性%[^a] 匹配非a的任意字符,并且停止读入,贪婪性6.例子1.sscanf默认以空格分割字符串。

c++stringstream(老好用了)

c++stringstream(老好用了)

c++stringstream(⽼好⽤了)前⾔: 以前没有接触过stringstream这个类的时候,常⽤的字符串和数字转换函数就是sscanf和sprintf函数。

开始的时候就觉得这两个函数应经很叼了,但是毕竟是属于c的。

c++中引⼊了流的概念,通过流来实现字符串和数字的转换⽅便多了。

在这⾥,总结之前的,并介绍新学的。

常见格式串: %% 印出百分⽐符号,不转换。

%c 整数转成对应的 ASCII 字元。

%d 整数转成⼗进位。

%f 倍精确度数字转成浮点数。

%o 整数转成⼋进位。

%s 整数转成字符串。

%x 整数转成⼩写⼗六进位。

%X 整数转成⼤写⼗六进位。

%n sscanf(str, "%d%n", &dig, &n),%n表⽰⼀共转换了多少位的字符sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...)。

作⽤是格式化字符串,具体功能如下所⽰: (1)将数字变量转换为字符串。

(2)得到整型变量的16进制和8进制字符串。

(3)连接多个字符串。

int main(){char str[256] = { 0 };int data = 1024;//将data转换为字符串sprintf(str,"%d",data);//获取data的⼗六进制sprintf(str,"0x%X",data);//获取data的⼋进制sprintf(str,"0%o",data);const char *s1 = "Hello";const char *s2 = "World";//连接字符串s1和s2sprintf(str,"%s %s",s1,s2);cout<<str<<endl;return0;}sscanf函数 sscanf函数原型为int sscanf(const char *str, const char *format, ...)。

C++中数字与字符串之间的转换scanfstring总结(复习必读)

C++中数字与字符串之间的转换scanfstring总结(复习必读)

C++中数字与字符串之间的转换scanfstring总结(复习必读) 1 string的scanf读⼊操作C++⾥⾯控制台输⼊直接使⽤cin操作就可以了;或者getline(istringstream,string);字符和数字加减就是字符的ASCII码和数字直接加减。

只有内置类型int,float,char,double,bool可以直接赋值,scanf读⼊string不能直接使⽤scanf直接赋值,因为string是⼀个类class,有专门的初始化函数,不能使⽤scanf,同理gets接收的也是⼀个char指针。

编程语⾔⾃带的sizeof也是⼀样,不能对string进⾏直接操作。

string s;s.resize(100);scanf("%s",&s[0]);或者:string s;char *c = new char(100);scanf("%s",c);//scanf("%s",&c[0]);s = c;//给⾸地址strlen是得到输⼊的有效字符串,⽽不是开辟的空间⼤⼩100.strlen所作的仅仅是⼀个计数器的⼯作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚⾄是某个不确定的内存区域)开始扫描,直到碰到第⼀个字符串结束符'\0'为⽌,然后返回计数器值。

--就是指实际字符串或字符数组的实际长度(不是所占空间的字节数)。

char A[6]={'a','b','\0','d','e','r'};int i=strlen(A); //i为2,因为到’\0’结束,故实际A[]只有2个元素sizeof()string s;char *c = new char(100);scanf("%s",c);int len = strlen(c);s1.resize(len);//动态编译s1.assign(c,c + len);//copy(c,c + len,s1.begin());针对其他结构class X { int i; int j; char k; }; X x;cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐cout<<sizeof(x)<<endl; 结果 12 同上解释⼀下,在class X中,成员中最⼤的所占的空间为int类型所占的空间4个字节,故内存补齐,最后结果为: ((int)(实际成员所占内存空间的和/4)+1)*4*所以不能通过sizeof(string) / sizeof(string[0])得到实际char元素个数,不管string等于多少,最后的结果都是28;因为string是⼀个class。

sscanf函数的用法 c++

sscanf函数的用法 c++

sscanf函数的用法c++sscanf函数是C++中的一个输入函数,用于从字符串中按照指定的格式读取数据。

它的原型如下:```c++int sscanf(const char* str, const char* format, ...);```其中,str是要读取的字符串,format是格式控制字符串,后面的参数是要读取的数据的地址。

sscanf函数的用法非常灵活,可以根据不同的格式字符串读取不同类型的数据。

下面我们将详细介绍sscanf函数的用法。

1. 读取整数要读取一个整数,可以使用"%d"格式字符串。

例如,假设有一个字符串"123",我们可以使用sscanf函数将其转换为整数:```c++const char* str = "123";int num;sscanf(str, "%d", &num);```在这个例子中,"%d"表示要读取一个整数,&num表示整数的地址。

经过sscanf函数的处理,num的值将变为123。

2. 读取浮点数要读取一个浮点数,可以使用"%f"格式字符串。

例如,假设有一个字符串"3.14",我们可以使用sscanf函数将其转换为浮点数:```c++const char* str = "3.14";float num;sscanf(str, "%f", &num);```在这个例子中,"%f"表示要读取一个浮点数,&num表示浮点数的地址。

经过sscanf函数的处理,num的值将变为3.14。

3. 读取字符串要读取一个字符串,可以使用"%s"格式字符串。

例如,假设有一个字符串"Hello World",我们可以使用sscanf函数将其转换为字符串:```c++const char* str = "Hello World";char buffer[20];sscanf(str, "%s", buffer);```在这个例子中,"%s"表示要读取一个字符串,buffer表示字符串的地址。

C ofstream与ifstream详细用法

C   ofstream与ifstream详细用法

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(&lt;&lt;)向流输出数据。

比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout&lt;&lt;"Write Stdout"&lt;&lt;'n';就表示把字符串"Write Stdout"和换行字符('n')输出到标准输出流。

2、析取器(&gt;&gt;)从流中输入数据。

比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin&gt;&gt;x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。

下面就把此类的文件操作过程一一道来。

一、打开文件在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。

两种方式的区别见前文ios::in:文件以输入方式打开(文件数据输入到内存)ios::out:文件以输出方式打开(内存数据输出到文件)ios::nocreate:不建立文件,所以文件不存在时打开失败ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败ios::trunc:如果文件存在,把文件长度设为0可以用“或”把以上属性连接起来,如ios::out|ios::binary打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。

c语言sscanf函数的用法

c语言sscanf函数的用法

c语言sscanf函数的用法sscanf函数是C语言中的一个输入函数,用于从字符串中提取格式化的数据。

它的功能类似于scanf函数,但不是从标准输入中读取数据,而是从字符串中读取数据。

sscanf函数的函数原型如下:```cint sscanf(const char *str, const char *format, ...);```其中,str表示输入的字符串,format表示格式化字符串,而...表示可以传递多个参数。

sscanf函数将根据format的格式化字符串从str 中提取数据,并将提取到的数据存储到相应的参数中。

通过sscanf函数,可以方便地实现一些对输入字符串的分析工作。

下面是sscanf函数的用法和一些示例:1.从字符串中提取整数:```cint num;sscanf(str, "%d", &num);```2.从字符串中提取多个数据:```cconst char *str = "Tom 20";char name[10];int age;sscanf(str, "%s %d", name, &age);```在这个示例中,通过格式化字符串"%s %d",sscanf函数从字符串中提取出"name"和"age"两个数据,并将它们分别存储到name数组和age变量中。

3. 使用sscanf在字符串中查找特定的数据:```cconst char *str = "apple is sweet.";char fruit[10];sscanf(str, "%s", fruit);```在这个示例中,sscanf函数将从字符串中提取第一个以空格分隔的字符串"apple",并将其存储到fruit数组中。

sscanf函数用法

sscanf函数用法

sscanf函数用法摘要:1.sscanf 函数概述2.sscanf 函数的基本语法3.sscanf 函数的参数4.sscanf 函数的使用示例5.sscanf 函数的注意事项正文:【1.sscanf 函数概述】sscanf 函数是C 语言中的一个输入函数,用于从字符串中读取数据并赋值给指定的变量。

它的主要作用是解析字符串中的数据,并将解析后的数据类型赋值给对应的变量。

【2.sscanf 函数的基本语法】sscanf 函数的基本语法如下:```int sscanf(const char *str, const char *format,...);```其中,`str`表示要解析的字符串,`format`表示格式控制字符串,`...`表示要赋值的变量。

【3.sscanf 函数的参数】- `str`:字符串指针,指向待解析的字符串。

- `format`:格式控制字符串,用于指定待解析数据的类型和格式。

- `...`:可变参数列表,用于存放解析后的数据。

【4.sscanf 函数的使用示例】下面是一个简单的sscanf 函数使用示例:```c#include <stdio.h>int main() {char str[] = "2019-08-01 12:00:00";int year, month, day, hour, minute, second;sscanf(str, "%d-%d-%d %d:%d:%d", &year, &month, &day,&hour, &minute, &second);printf("年:%d,月:%d,日:%d,时:%d,分:%d,秒:%d ", year, month, day, hour, minute, second);return 0;}```在这个示例中,我们使用sscanf 函数从字符串`str`中解析出年、月、日、时、分、秒六个变量,并将解析后的值输出。

sscanf用法

sscanf用法

sscanf用法摘要:一、前言二、sscanf 函数概述1.功能与原型2.参数说明三、sscanf 函数用法详解1.用法一:从标准输入设备读取数据2.用法二:从字符串中读取数据3.用法三:从文件中读取数据四、sscanf 函数与scanf 函数的异同五、总结正文:一、前言在C 语言中,输入输出是程序与外部环境进行数据交换的重要方式。

在本文中,我们将详细介绍一种常用的输入函数:sscanf。

二、sscanf 函数概述sscanf 函数用于从指定的字符串中读取数据,与scanf 函数类似,但它具有更高的灵活性和更强大的功能。

1.功能与原型sscanf 的函数原型为:```cint sscanf(const char *str, const char *format, ...);```函数从字符串`str`中按照格式说明符`format`读取数据,并将其存储到指定的变量中。

2.参数说明- `str`:输入字符串。

- `format`:格式说明符,用于指定输入数据的类型和格式。

- `...`:可变参数列表,用于存储读取到的数据。

三、sscanf 函数用法详解1.用法一:从标准输入设备读取数据假设我们有一个简单的程序,从标准输入设备读取一个字符串,并按照格式说明符解析字符串中的数据:```c#include <stdio.h>int main() {char str[100];int a, b, c;printf("请输入一个字符串:");fgets(str, sizeof(str), stdin);sscanf(str, "%d%d%d", &a, &b, &c);printf("解析到的数据为:%d %d %d", a, b, c);return 0;}```程序从标准输入设备读取一个字符串,然后使用sscanf 函数解析字符串中的整数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sscanf与stringstream函数的用法总结
在按tab为分隔符读取文件的时候,遇到了很多问题,c++不像java、C#对字符串游很好的操作,我在查了很多资料,查到了sscanf和stringstream函数,这两个函数对上述问题可以很好的解决。

在读取字符串时,sscanf和stringstream非常强大,尤其是当以某个字符为分隔符读入字符串,并把分割后字符串转换成double或者int时,这两个函数的优势就体现出来,以下是我看了很多资料后,总结的一些用法。

sscanf是一个运行时函数,原形很简单:
int sscanf(const char*buffer,const char*format[,argument]...);
它强大的功能体现在对format的支持,以及类型转换上。

其中的format可以是一个或多个{%[*][width][{h|l|I64|L}]type|''|'\t'|'\n'|非%符号},
注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

width:宽度,一般可以忽略,用法如:
const char sourceStr[]="hello,world";
char buf[10]={0};
sscanf(sourceStr,"%5s",buf);//%5s,只取5个字符
cout<<buf<<endl;
结果为:hello
{h|l|I64|L}:参数的size,通常h表示单字节size,I表示2字节size,L表示4字节size(double例外),l64表示8字节size。

type:这就很多了,就是%s,%d之类。

特别的:
%*[width][{h|l|I64|L}]type表示满足该条件的被过滤掉,不会向目标参数中写入值。

如:
const char sourceStr[]="hello,world";
char buf[10]={0};
sscanf(sourceStr,"%*s%s",buf);//%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
cout<<buf<<endl;
结果为:world
支持集合操作:
%[a-z]表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB']匹配a、B、'中一员,贪婪性
%[^a]匹配非a的任意字符,贪婪性
例:
给定一个字符串iios/12DDWDFF@122,获取/和@之间的字符串,先将"iios/"过滤掉,再将非'@'的一串内容送到buf中:
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);
printf("%s\n",buf);
结果为:12DDWDFF
sscanf可以从字符串中取出整数、浮点数和字符串等等。

它的使用方法简单,特别对于整数和浮点数来说。

stringstream,顾名思义,就是字符串的输入输出流,跟fstream很相似。

需包含头文件:#include<sstream>
stringstream通常是用来做数据转换的。

相比c库的转换,它更加安全,自动和直接。

例子一:基本数据类型转换例子int转string
#include<string>
#include<sstream>
#include<iostream>
int main()
{
std::stringstream stream;
std::string result;
int i=1000;
stream<<i;//将int输入流
stream>>result;//从stream中抽取前面插入的int值
std::cout<<result<<std::endl;//print the string"1000"
}
运行结果:print the string"1000"
例子二:除了基本类型的转换,也支持char*的转换。

#include<sstream>
#include<iostream>
int main()
{
std::stringstream stream;
char result[8];
stream<<8888;//向stream中插入8888
stream>>result;//抽取stream中的值到result
std::cout<<result<<std::endl;//屏幕显示"8888"
}
屏幕显示"8888"
例子三:再进行多次转换的时候,必须调用stringstream的成员函数clear().
#include<sstream>
#include<iostream>
int main()
{
std::stringstream stream;
int first,second;
stream<<"456";//插入字符串
stream>>first;//转换成int
std::cout<<first<<std::endl;
stream.clear();//在进行多次转换前,必须清除stream
stream<<true;//插入bool值
stream>>second;//提取出int
std::cout<<second<<std::endl;
}
运行clear的结果:
456
1
没有运行clear的结果:
456
8800090900
注意stringstream和sscanf的区别:
如果str[]="one two three four";
如果按照这么读:char word[20][20];
那么sscanf读入的每一个word[i]都是单词"one",而用stringstream则是将这几个单词依次读入。

原因很简单,stringstream是对一个确定的字符串进行操作,内部有一个指针标记读到哪了,而sscanf则每次都是从头对str进行读入。

相关文档
最新文档