c++中输入输出流分三类:
iostream 输入输出流
fstream 文件流
sstream 字符串流
继承关系
-
std::istringstream
字符串输入流,用于将字符串作为输入源,可以从字符串中读取数据 -
可以使用
operator>>
类似于从标准输入流中读取数据,流到变量中 -
主要用于从字符串中提取数据
-
int main() { string name; string sex; int age; istringstream f1("zhangsan man 20"); //输入字符串流对象,默认空白符分隔,将字符串作为输入流,用于拆分字符串 f1 >> name >> sex >> age; cout << name << sex << age << endl;/ }
-
std::ostringstream
字符串输出流对象,用于将数据输出到字符串中 -
可以使用
operator<<
类似于将数据输出到标准输出流中 -
主要用于拼接字符串以供后续使用或输出
-
int main() { ostringstream f2;//字符串输出流对象 f2 << 10 << "-" << "test" ; cout << f2.str()<<endl; //str()函数返回一个string对象,输出10-test }
-
std::stringstream
实际上同时具备了std::istringstream
和std::ostringstream
的功能 -
可以用作字符串输入流,也可以作为字符串输出流
-
int main(){ /* stringstream拼接字符串*/ string name("zhangsan"); string age("23"); string sex("man"); stringstream sstr; sstr << name << age << sex; //将数据流到字符串流对象中,通过str()提取流中的字符串 cout<<sstr.str(); }
int main(){ /*stringstream拆分字符串*/ string date = "2024 1 1"; stringstream ostring(date); //用字符串构造字符串流对象 string year; string month; string day; ostring >> year >> month>> day;//将流对象中的字符串流入到变量中,拆串 cout <<"year=" <<year << "month="<<month <<"day ="<<day ; }
/*循环拆串,默认空格*/ int main() { char s[] = {"dog cat cat dog"}; stringstream s1(s); string temp; while (s1 >> temp){ //s1 >> temp返回一个istream&输入流对象引用,支持链式调用,读取到字符串末尾时,返回失败状态,终止循环,可以用s1.fail()来判断状态 cout << temp<<endl; } /*while(!ostring.fail()){ ostring >> temp; cout << temp; }*/ }
/*用指定分隔符拆串*/ int main() { string str = "2024-08-15"; stringstream ss(str); string temp; while (getline(ss,temp,'-')) { //用指定分隔符拆串,默认是空格,getline从ss流对象中读取字符串存放到temp中,读取流对象中字符串末尾的时候,返回错误状态,退出循环 cout << temp; } }