getline 、 cin.getline、stringstream
getline 与 cin.getline 的区别
getline (来自<string>库)
- 用于读取输入流中的一行数据,存储到
std::string对象中。 - 语法:
getline(istream& is, string& str, char delim),其中delim是可选的分隔符(默认为'\n')。 - 动态调整
string的大小以适应输入内容。 - 示例:
#include<string>#include<iostream>usingnamespacestd;intmain(){string line;getline(cin,line);// 读取整行,包括空格cout<<line;}cin.getline (来自<iostream>库)
- 用于读取输入流中的一行数据,存储到 C 风格字符数组(
char[])中。 - 语法:
cin.getline(char* s, streamsize n, char delim),n指定最大读取长度(包括终止符'\0')。 - 固定缓冲区大小,可能因输入过长导致截断或错误。
n:就是一个变量名,一般表示要读取 / 写入的字符数或字节数。 - 示例:
#include<iostream>usingnamespacestd;intmain(){charbuffer[100];cin.getline(buffer,100);// 读取最多 99 个字符cout<<buffer;}关键区别
- 存储类型:
getline用string,cin.getline用char[]。 - 安全性:
getline自动管理内存,cin.getline需手动分配缓冲区。 - 灵活性:
getline支持动态扩展,cin.getline受固定大小限制。
stringstream 的使用方法
stringstream(来自<sstream>库)用于将字符串视为流,支持类似cin/cout的操作,常用于字符串分割或类型转换。
基本用法
#include<sstream>#include<string>usingnamespacestd;intmain(){string data="123 3.14 hello";stringstreamss(data);// 初始化intnum;doublepi;string text;ss>>num>>pi>>text;// 提取数据cout<<num<<" "<<pi<<" "<<text;}字符串分割
string input="apple,orange,banana";stringstreamss(input);string token;while(getline(ss,token,',')){// 按逗号分割cout<<token<<endl;}去除字符串中的空格
#include<iostream>#include<sstream>#include<string>#include<vector>intmain(){std::string input="Hello World This is a test";std::istringstreamiss(input);std::vector<std::string>tokens;std::string token;while(iss>>token){tokens.push_back(token);}return0;}类型转换
string numStr="42";stringstreamss(numStr);intnum;ss>>num;// 字符串转整数