您现在的位置是:首页 >技术杂谈 >从字符串中读写的方法:c语言中的sscanf、sprintf函数,c++中的I/O流strstream、stringstream网站首页技术杂谈
从字符串中读写的方法:c语言中的sscanf、sprintf函数,c++中的I/O流strstream、stringstream
简介从字符串中读写的方法:c语言中的sscanf、sprintf函数,c++中的I/O流strstream、stringstream
一、sscanf、sprintf函数
众所周知,c语言中我们常使用的标准输入输出流函数为scanf()、printf(),默认从键盘上输入数据、向屏幕输出数据。此外,c语言中还提供了另一组库函数sscanf()、sprintf()函数,它们的功能与前者相同,只不过输入输出的对象为字符串。
这两个函数的原型为
#include <stdio.h>
int sscanf(const char *buffer, const char *format[, argument]...);
int sprintf(char *buffer, const char *format[, argument]...);
除了第一个参数外,其他参数的含义和用法实际上是与scanf()、printf()相同的。下面给举个例子。
#include <stdio.h>
struct student {
char name[20];
int age;
float score;
};
int main()
{
// 使用sscanf()函数从字符串中获取输入
char in_arr[50] = "Zhangsan 20 90.5";
struct student stu;
sscanf(in_arr, "%s %d %f", stu.name, &stu.age, &stu.score);
printf("%s, %d, %f
", stu.name, stu.age, stu.score);
// 使用sprintf()函数向字符串中输出
char out_arr[50];
stu.age = 25;
stu.score = 85.0;
sprintf(out_arr, "%s %d %f", stu.name, stu.age, stu.score);
printf("%s", out_arr);
return 0;
}
运行结果为
二、c++中的istringstream、ostreamstring、stringstream
c++中的stringstream派生自iostream,将输入输出流定向至string对象中,已完成和sscanf/sprintf相似的效果。
需要包括头文件#include <sstream>
。
istringstream的作用是从string对象中读取,由istream中派生,构造函数原型
istringstream::istringstream(string str);
常用成员函数
str():使istringstream返回一个string字符串
ostringstream的作用是从string对象中读取,由ostream中派生,构造函数原型
ostringstream::ostringstream();
ostringstream::ostringstream(string str); 使用一个string初始化ostringstream,
常用成员函数
str():使ostringstream返回一个string字符串
stringstream的作用就是istringstream + ostringstream。
举个例子。
#include <iostream>
#include <sstream>
using namespace std;
struct student {
char name[20];
int age;
float score;
};
int main()
{
// 使用istringstream从字符串中获取输入
string in_str = "Zhangsan 20 90.5";
struct student stu;
istringstream strin(in_str);
strin >> stu.name >> stu.age >> stu.score;
cout << stu.name << ", " << stu.age << ", " << stu.score << endl;
// 使用ostringstream向字符串中输出
stu.age = 25;
stu.score = 85.0;
ostringstream strout; //建立输出字符串流,与数组out_arr建立关系,缓冲区长度为50
strout << stu.name << " " << stu.age << " " << stu.score;
cout << strout.str();
return 0;
}
运行结果为
三、c++中的istrstream、ostrstring、strstream
strstream的作用是与stringstream相同,不同的是strstream读写的是char *字符串,stringstream读写的是string类。
istrstream的构造函数原型为
istrstream::istrstream(char *buffer);
istrstream::istrstream(char *buffer, int n);
ostrstream的构造函数原型为
ostrstream::ostrstream(char *buffer, int n, int mode=ios::out);
strstream的构造函数原型为
strstream::strstream(char *buffer, int n, int mode);
举个例子。
#include <iostream>
#include <strstream>
using namespace std;
struct student {
char name[20];
int age;
float score;
};
int main()
{
// 使用istrstream从字符串中获取输入
char in_arr[50] = "Zhangsan 20 90.5";
struct student stu;
istrstream strin(in_arr);
strin >> stu.name >> stu.age >> stu.score;
cout << stu.name << ", " << stu.age << ", " << stu.score << endl;
// 使用ostrstream向字符串中输出
char out_arr[50];
stu.age = 25;
stu.score = 85.0;
ostrstream strout(out_arr, sizeof(out_arr)); //建立输出字符串流,与数组out_arr建立关系,缓冲区长度为50
strout << stu.name << " " << stu.age << " " << stu.score;
strout << ends; //ends是C++的I/O操作符,ostrstream不会自动补'