您的位置:首页 > 编程语言 > C语言/C++

C++Primer第五版 第八章习题答案(1~10)

2017-02-23 09:10 495 查看

1:知识点1:IO类分别定义在三个独立的头文件中

<`iostream>定义了基于读写流的基本类型

<`fstream>定义了读写命名文件的类型

<`sstream>定义了读写内存string对象的类型

三个头文件皆在标准库中。

istream& func(istream &is)
{
string mm;
while(is >> mm)
cout<<mm<<endl;
is.clear();//对流进行置位的函数
return is;
}


遇到的问题:本地函数定义非法:C/C++不允许在函数额内部再次定义函数

2:将上面函数的参数改为cin即可

3:

知识点:badbit :流已崩溃

eofbit :流达到了文件结束位置

failbit :IO操作失败

bad、eof、fail在对应错误位置时,cin会在错误状态,即循环中止

4:知识点:文件的读入与重写,两种文件流皆有open和close函数,之后视情况打开读或者写模式

string infile;//代表文件名
ifstream in(infile);//ifstream定义了一个输入流in(文件流),它被初始化从文件中读取数据
if (in)//检查文件的读取是否成功,养成良好的习惯!
{
//......
}
else
{
cerr<<"cannot open this file: "<<infile<<endl;
}
in.close();//关闭文件
in.open(infile + ".copy");//关闭文件后,才可以打开另一个文件

ofstream out;//ofstream不与任何文件相关联,只定义了一个输出流out(文件流)
if (out)
{
}
else
{
cerr<<"sorry"<<endl;
}
out.open(file + ".copy");
/*当一个fstream对象被销毁时,close函数会被自动调用*/


答案:

#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;

int main(int argc, char**argv)
{
/*两种文件流皆有open和close函数,之后视情况打开读或者写模式*/
string infile = "1.txt";//代表文件名
vector<string> vec;//声明一个vector
ifstream in(infile);//ifstream定义了一个输入流in(文件流),它被初始化从文件中读取数据
if (in)//检查文件的读取是否成功,养成良好的习惯!
{
string buf;
while (getline(in,buf))//每行独立输入的方法,利用getline
{
vec.push_back(buf);
}
}
else
{
cerr<<"cannot open this file: "<<infile<<endl;
}
for (int i = 0;i < vec.size();++i)
{
cout<<vec[i]<<endl;
}

return 0;
}


5:

#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>

using namespace std;

int main(int argc, char**argv)
{
/*两种文件流皆有open和close函数,之后视情况打开读或者写模式*/
string infile = "1.txt";//代表文件名,注意需要放在当前目录下
vector<string> vec;//声明一个vector
ifstream in(infile);//ifstream定义了一个输入流in(文件流),它被初始化从文件中读取数据
if (in)//检查文件的读取是否成功,养成良好的习惯!
{
string buf;
while (in >> buf)//每个单词的独立输入,自动以空格为间隔
{
vec.push_back(buf);
}
}
else
{
cerr<<"cannot open this file: "<<infile<<endl;
}
for (int i = 0;i < vec.size();++i)
{
cout<<vec[i]<<endl;
}

return 0;
}


6:P284页一模一样。

7:将输出文件名作为第二个参数,即为argv[2]

fstream out(argv[2])


8:知识点:文件模式,指明在打开文件以后如何使用,app模式(append)定位到文件末尾

ofstream out("file",ofstream::app);//定位到文件结尾,保存文件中的已有数据


9:知识点:istringstream从string中读取数据,保存在其对象之中

#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;

istream& func(istream& is)
{
string buf;
while (is >> buf)
std::cout << buf << std::endl;
is.clear();
return is;
}

int main(int argc, char**argv)
{
/*两种文件流皆有open和close函数,之后视情况打开读或者写模式*/
string infile = "1.txt";//代表文件名
vector<string> vec;//声明一个vector
ifstream in(infile);//ifstream定义了一个输入流in(文件流),它被初始化从文件中读取数据
istringstream iss("hello");
func(iss);
if (in)//检查文件的读取是否成功,养成良好的习惯!
{
string buf;
while (in >> buf)//每个单词的独立输入,自动以空格为间隔
{
vec.push_back(buf);
}
}
else
{
cerr<<"cannot open this file: "<<infile<<endl;
}
for (int i = 0;i < vec.size();++i)
{
cout<<vec[i]<<endl;
}

return 0;
}


10:

#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;

int main(int argc, char**argv)
{
/*两种文件流皆有open和close函数,之后视情况打开读或者写模式*/
string infile = "1.txt";//代表文件名
vector<string> vec;//声明一个vector
ifstream in(infile);//ifstream定义了一个输入流in(文件流),它被初始化从文件中读取数据

if (in)//检查文件的读取是否成功,养成良好的习惯!
{
string buf;
while (getline(in,buf))//每个单词的独立输入,自动以空格为间隔
{
vec.push_back(buf);
}
}
else
{
cerr<<"cannot open this file: "<<infile<<endl;
}
for (int i = 0;i < vec.size();++i)
{
istringstream iss(vec[i]);//将istringstream与vec[i]相绑定
string word;
while(iss >> word)
cout<<word<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息