目录
3.1
C++代码:
//3.1
//读写文本文件,将文件中的每个单字存入map的key值中,value则是该单字在文本文件中出现次数,再定义一份排除字眼组成的set,将某单字放入map之前先确定该单字不在排除字集中。
//文本文件读取完毕后,显示一份单字清单,并显示各单字出现次数
//显示单字之前,允许用户查询某个单字是否存在于文本文件中
#include<iostream>
#include<fstream> //读写文本文件
#include<map>
#include<set>
#include<string>
#include<vector>
using namespace std;
void user_query(const map<string, int>& m1);
void display_word_const(const map<string, int>& m1,ostream &os); //以iofstream流作为函数参数时,一定要传入引用
int main()
{
ifstream in_file("data.txt");
if (!in_file)
{
cerr << "无法打开文件" << endl;
return -1;
}
map<string, int> m1;
set<string> s1;
vector<string> v1(6);
cout << "请输入排除字眼:" << endl;
string temps1;
for (int i = 0; i < 6; i++)
{
cin >> temps1;
v1.push_back(temps1);
}
//将排除字眼插入set中
s1.insert(v1.begin(), v1.end());
//常规向map输入的方法: cin>>twords; m1[mapstring]++;
//从文件中向map输入: in_file>>twords; m1[mapstring]++;
string mapstring;
while(in_file >> mapstring)
{
if (s1.count(mapstring)) //set的count和map的count使用方法类似,返回参数mapstring在容器中出现的次数
{
continue; //跳过接下来的语句,重新进行迭代
}
m1[mapstring]++;
}
//查询map中是否存在某个单字
user_query(m1);
//display:
display_word_const(m1, cout);
system("pause");
return 0;
}
void user_query(const map<string, int>& m1)
{
string search_word;
cout << "请输入想要搜寻的单字或者输入'q'以退出此程序: ";
cin >> search_word;
while (search_word.size() && search_word != "q") //第一个参数是确保search_word不为空,第二个参数是search_word不为程序退出条件q(同时因为string是字符串,所以应当是字符串"q")
{
map<string, int>::const_iterator it = m1.find(search_word); //map的find函数,如果参数值在map中,则会返回一个iterator指向此位置,否则会返回end();
if (it != m1.end()) //如果it == m1.end(),则说明search_word不存在于此map中
{
cout << "Found " << it->first
<< " occurs " << it->second
<< " times" << endl;
}
else
{
cout << search_word << " was not found in text" << endl;
}
cout << "请继续输入想要搜寻的单字(输入'q'退出)" << endl;
cin >> search_word;
}
}
void display_word_const(const map<string, int>& m1, ostream& os)
{
map<string, int>::const_iterator it_begin;
map<string, int>::const_iterator it_end;
it_begin = m1.begin();
it_end = m1.end();
while (it_begin != it_end)
{
os << it_begin->first << " ( " << it_begin->second << " ) " << endl;
it_begin++;
}
os << endl;
}
程序运行结果:
3.2
C++代码:
//3.2
//读取文本文件内容并将内容储存于vector中
//以字符串长度为依据,对vector进行排序
//定义一个function object并传给sort()进行升序排序 -- 自定义一个fuction object接受两个参数,当第一字符串的长度小于第二字符串的长度时,返回true
//打印排序后的vector内容
#include<iostream>
#include<vector>
#include<algorithm> //sort()
#include<fstream>
using namespace std;
//fuction object;
class Lessthan
{
public:
bool operator()(const string& s1, const string& s2) //重载运算符' () ',使得Lessthan()即为一个fucion object并可以以Lessthan()的形式传递给sort()作为参数
{
return s1.size() < s2.size() ? true : false; //如果s1.size() < s2.size()则返回true反之则返回false
}
};
void display_vector(const vector<string>ivec)
{
vector<string>::const_iterator it = ivec.begin();
while (it != ivec.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
int main()
{
ifstream in_file("data.txt");
if (!in_file)
{
cerr << "文件无法打开" << endl;
return -1;
}
vector<string>ivec;
//将文件中的内容输入到ivec中
string word;
while (in_file >> word) //终止条件为文件中没有内容继续输入
{
ivec.push_back(word); // 不知道vector数组的大小,使用push_back()进行插入是最好选择
}
cout << "排序前:" << endl;
display_vector(ivec);
//排序:
sort(ivec.begin(), ivec.end(), Lessthan());
//display:
cout << "排序后:" << endl;
display_vector(ivec);
system("pause");
return 0;
}
程序运行结果:
3.3
C++代码:
//3.3
//定义一个map,以家庭姓氏为key,value则是家庭所有小孩的名字。
//此map至少容纳六笔数据
//允许用户根据姓氏来查询,并得以打印map的每一笔数据
#include<iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
void search_display(map<string, vector<string>>fn)
{
map<string, vector<string>>::const_iterator it = fn.begin();
string first_name;
cout << "输出姓氏:";
cin >> first_name;
while (it != fn.end())
{
if (first_name == it->first)
{
cout << "找到了!" << endl;
break;
}
else
{
it++;
}
}
if (it == fn.end())
{
cout << "该姓氏不存在于map中" << endl;
return;
}
// first_name -- it->first second_namme -- it->second;
vector<string> tempvec(it->second);
vector<string>::const_iterator iter = tempvec.begin();
while (iter != tempvec.end())
{
cout << "姓名:" << it->first << " " << *iter << endl;
iter++;
}
}
int main()
{
map<string, vector<string>> family_name;
string first_name = "none";
//储存数据过程
cout << "输入家庭姓氏(输入q退出储存程序): ";
cin >> first_name;
while (first_name != "q")
{
vector<string> v1;
string last_name = "none";
cout << "输入家庭孩子的姓名(输入q退出输入进程): " << endl;
while (last_name != "q")
{
cin >> last_name;
if (last_name != "q")
{
v1.push_back(last_name);
}
}
family_name[first_name] = v1; //first_name对应的是key值,v1对应的是value值
cout << "输入家庭姓氏(输入q退出储存程序): ";
cin >> first_name;
}
//搜寻打印过程
search_display(family_name);
system("pause");
return 0;
}
程序运行结果:
3.4
C++代码:
//3.4
//利用istream_iterator从标准输入设备输入连续一连串整数 (cin)
//利用ostream_iterator将其中的奇数写到某个文件,每个数值皆以空格分隔 (out_file1," ")
//再利用ostream_iterator将偶数写到另一个文件,每个数值单独放在一行 (out_file2, '\n')
#include<iostream>
#include<fstream>
#include<iterator> // 使用istream_iterator<>和ostream_iterator<>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//容器
vector<int> ivec;
//first;
istream_iterator<int> is(cin);
//last;
istream_iterator<int> eof;
//利用copy完成从标准输入设备输入
cout << "输入整数: " << endl;
copy(is, eof, back_inserter(ivec));
fstream out_file1("data1.txt");
fstream out_file2("data2.txt");
if (!out_file1 || !out_file2)
{
cout << "无法打开文件" << endl;
return 0;
}
vector<int>::const_iterator it = ivec.begin();
ostream_iterator<int> os1(out_file1, " ");
ostream_iterator<int> os2(out_file2, "\n");
vector<int>text1;
vector<int>text2;
while (it != ivec.end())
{
//奇数
if (*it % 2 != 0)
{
text1.push_back(*it);
}
else
{
text2.push_back(*it);
}
}
//输入到文件中
copy(text1.begin(), text1.end(), os1);
copy(text2.begin(), text2.end(), os2);
system("pause");
return 0;
}