记录essential C++的练习题,解题办法仅供参考,代码不够简洁,但是确实是按照要求完成了题目。
3.1
#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <iterator>
#include <set>
using namespace std;
int main()
{
ifstream in_file("D:\\input_file.txt");
if (!in_file)
cerr << "open failes false\n";
istream_iterator<string> is(in_file);
istream_iterator<string> eof;
ostream_iterator<string> os(cout," ");
ostream_iterator<int> os2(cout, " ");
map<string, int> ma;
map<string, int>::iterator ite;
set<string> se;//排除字集
se.insert("a");
se.insert("an");
se.insert("or");
se.insert("the");
se.insert("and");
se.insert("but");
for (; is != eof; ++is)
{
if ((find(se.begin(), se.end(), *is)) == se.end())//无排除字符,加入map
{
if ((ite = ma.find(*is)) != ma.end())
{
ite->second += 1;
}
else
{
ma.insert(pair<string, int>(*is,1));
}
}
}
for (auto i : ma)
{
os = i.first;
os2 = i.second;
cout << endl;
}
system("pause");
return 0;
}
3.2
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
bool less_than_(string str1, string str2)
{
return str1.length() > str2.length() ? true : false;
}
int main()
{
ifstream in_file("D:\\input_file.txt");
istream_iterator<string> is(in_file);
istream_iterator<string> eof;
ostream_iterator<string> oss(cout,"\n");
ostream_iterator<int> osi(cout);
vector<string> vec;
map<string, int> ma;
map<string, int>::iterator ite;
set<string> se;
se.insert("a");
se.insert("an");
se.insert("or");
se.insert("the");
se.insert("and");
se.insert("but");
for (; is != eof; ++is)
{
//copy(is, eof, back_inserter(vec));
//ite = ma.find(*is);
//if ((find(se.begin(), se.end(), *is)) == se.end())//无
//{
// if (ite == ma.end())//新数据
// ma.insert(pair<string, int>(*is, 1));
// else
// ite->second += 1;
//}
copy(is, eof, back_inserter(vec));
}
//for (auto i : ma)
//{
// oss = i.first;
// osi = i.second;
// oss = "\n";
//}
//copy(ma.begin(), ma.end(), oss);
sort(vec.begin(), vec.end(), less_than_);
copy(vec.begin(), vec.end(), oss);
system("pause");
return 0;
}
//注:是由第一题改编而来,被注释掉了的代码只是为了更好理解
3.3
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
string str;
map<string, vector<string>> ma;
vector<string> a, b, c, d, e, f;
a.push_back("Pico\n");
a.push_back("Kell\n");
a.push_back("Jack\n");
ma.insert(pair<string,vector<string>>("A", a));
while (cin >> str)
{
if (str == "ok")
break;
map<string, vector<string>>::iterator ite = ma.find(str);
if (ite == ma.end())//无
{
str.clear();
continue;
}
else
{
for (auto i : ite->second)
cout << i;
}
}
system("pause");
return 0;
}
3.4
#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
istream_iterator<int> is(cin);
istream_iterator<int> eof;
ofstream out_file("D:\\input_file.txt");
ofstream out_file_("D:\\output_file.txt");
if (!out_file || !out_file_)
{
cerr << "open file false\n";
return 0;
}
vector<int> vec;
vector<int> vec1;//奇数
vector<int> vec2;//偶数
copy(is,eof,back_inserter(vec));
vector<int>::iterator ite = vec.begin();
for (; ite != vec.end(); ++ite)
{
if (*ite % 2 != 0)//奇数
vec1.push_back(*ite);
else
vec2.push_back(*ite);
}
ostream_iterator<int> os(out_file, " ");
ostream_iterator<int> os_(out_file_, " ");
copy(vec1.begin(), vec1.end(), os);
copy(vec2.begin(), vec2.end(), os_);
system("pause");
return 0;
}
具体有一些小细节就懒得改了,像啥输出格式这些,解题思路应该就是这样,不过代码肯定没有标准答案简洁,建议再去看一遍标准答案。