用到的知识
- getline()函数;
- stringstream类;
getline()函数
c++中有两种getline()函数。
第一种:在头文件
中,是istream类的成员函数 第二种:在头文件
中,是普通函数
第一种
在
中的getline()函数有两种重载形式: istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
用法:
从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,
如果遇到delim或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。
第二种
在
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&& is, string& str);
用法和上第一种类似,但是 读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。
函数的变量:
is :表示一个输入流,例如cin。
str :string类型的引用,用来存储输入流中的流信息。
delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
stringstream类
C++中标准IO库有三大类
iostream : 支持对标准输入输出设备(键盘,显示器)的读写;
fstream: 支持对文件的读写;
stringstream: 支持对string 对象更灵活的处理;
作用:类型转换,词句转换
一. stringstream 一般可以用来实现安全的数据类型转换:
以int 类型为例
int 类型转string 类型
int a = 50; string b; stringstream ss; ss << a; ss >> b; // 转换后 b="50";
string 类型转int
int a ; string b = "100"; stringstream ss; ss << b; ss >> a; // a= 100
string 转wstring (string -> int -> wstring)
int a;
string b = “100”;
wstring c;
stringstream ss;
ss << b;
ss >> a;
cout<<a<<endl;wstringstream ws;
ws << a;
ws >> c;
wcout<<c<<endl;
此种转换有一定的局限性,只能用于string 内容为数字的转换;
二. 利用stringstream 实现句子与单个单词之间的转换;
句子 转为单个的词
string a ="how old are you , dear ?"; stringstream ss; ss << a; string b; while(ss >> b) { cout <<b<<endl; }
单个的词拼接为句子
stringstream ss; ss << "how"<<" "<<"old"<<" "<<"are"<<" "<<"you"<<" "<<","<<"dear"<<" "<<"?"; string b; b = ss.str(); cout<<b<<endl;
代码模板
string line, word;
getline(cin, line); //将输入流cin以回车键截断,将截断的流的内容赋值给line
stringstream stream(line); //将line的内容转化为流输入到stream
while(stream >> word) //将流的内容以空格分割输入到word
{
//Your code
}
string line, word;
getline(cin, line);
stringstream stream(line);
while(stream >> word)
{
//Your code
}