8.1,8.2
std::istream & func(std::istream& is)
{
string s;
while (is>>s)
{
cout<<s<<endl;
}
is.clear();
return is;
}
int main()
{
func(cin);
}
8.4
vector<string> func(string s)
{
std::ifstream ifs(s);
vector<string> v;
string line;
if (ifs)
{
while(std::getline(ifs,line))
{
v.push_back(line);
}
}
return v;
}
int main()
{
vector<string> v=func("data");
for (auto &c:v)
cout<<c<<endl;
}
8.5
vector<string> func(string s)
{
std::ifstream ifs(s);
vector<string> v;
string word;
if (ifs)
{
while(ifs>>word)
{
v.push_back(word);
}
}
return v;
}
int main()
{
vector<string> v=func("data");
for (auto &c:v)
cout<<c<<endl;
}
8.6
int main(int argc,char **argv)
{
std::ifstream ifs(argv[1]);
if (!ifs) return 1;
Sales_data total(ifs);
if (!total.isbn().empty())
{
Sales_data trans;
while (read(ifs,trans))
{
if (total.isbn()==trans.isbn())
{
total.combine(trans);
}
else
{
print(cout,total)<<endl;
total=trans;
}
}
print(cout,total)<<endl;
}
else
{
std::cerr<<"NO DATA?"<<endl;
return -1;
}
return 0;
}
8.7
int main(int argc,char **argv)
{
std::ifstream ifs(argv[1]);
std::ofstream ofs(argv[2]);
if (!ifs) return 1;
Sales_data total(ifs);
if (!total.isbn().empty())
{
Sales_data trans;
while (read(ifs,trans))
{
if (total.isbn()==trans.isbn())
{
total.combine(trans);
}
else
{
print(ofs,total);
ofs<<endl;
total=trans;
}
}
print(ofs,total);
ofs<<endl;
}
else
{
std::cerr<<"NO DATA?"<<endl;
return -1;
}
return 0;
}
8.8 demo.exe
int main(int argc,char **argv)
{
std::ifstream ifs(argv[1]);
std::ofstream ofs(argv[2],std::ofstream::app);
if (!ifs) return 1;
Sales_data total(ifs);
if (!total.isbn().empty())
{
Sales_data trans;
while (read(ifs,trans))
{
if (total.isbn()==trans.isbn())
{
total.combine(trans);
}
else
{
print(ofs,total)<<endl;
total=trans;
}
}
print(ofs,total)<<endl;
}
else
{
std::cerr<<"NO DATA?"<<endl;
return -1;
}
return 0;
}
在同一目录下创建输入文件input_data,在文件中提前写入我们需要输入的信息,如: 1-101 2 30 1-101 3 40 打开cmd,输入demo.exe input_data output_data Enter运行,打开文件目录,即可看到增加的文件output_data,内容就是输出结果。
8.9
std::istream& func(std::istream& is)
{
string s;
while (is>>s)
cout<<s<<endl;
is.clear();
return is;
}
int main()
{
std::istringstream istrs("hello world! I am Bob");
func(istrs);
}
8.10
std::istream& func(std::istream& is)
{
string s;
while (is>>s)
cout<<s<<endl;
is.clear();
return is;
}
int main(int argc,char **argv)
{
string line,word;
vector<string> v;
std::ifstream ifs(argv[1]);
while (std::getline(ifs,line))
v.push_back(line);
for (auto &l:v)
{
std::istringstream iss(l);
while (iss>>word)
cout<<word<<endl;
}
}
8.13
struct PersonInfo
{
string name;
vector<string> phones;
};
bool valid(const string &s)
{
for (const auto c:s)
if(!isdigit(c)) return false;
return true;
}
string format(const string &s)
{
return s;
}
int main(int argc,char **argv)
{
std::ifstream ifs(argv[1]);
std::ofstream ofs(argv[2]);
string line,word;
vector<PersonInfo> people;
while (std::getline(ifs,line))
{
PersonInfo info;
std::istringstream record(line);
record>>info.name;
while (record>>word)
{
info.phones.push_back(word);
}
people.push_back(info);
}
for (const auto &entry:people)
{
std::ostringstream formatted,badNums;
for (const auto &nums:entry.phones)
{
if (!valid(nums))
badNums<<" "<<nums;
else
formatted<<" "<<format(nums);
}
if (badNums.str().empty())
ofs<<entry.name<<" "<<formatted.str()<<endl;
else
std::cerr<<"input error:"<<entry.name<<"invalid number(s)"<<badNums.str()<<endl;
}
}
|