C++Primer11.3.6节练习

练习11.33:

#include 
using namespace std;
#include 
#include 
#include 
#include 
#include 
#include 
#include 

const string& transform(const string& s, map& mp_trans)
{
	auto it = mp_trans.find(s);
	if (it != mp_trans.end())
	{
		//在单词转换规则中,转换后返回
		return it->second;
	}
	else
	{
		//没有在单词转换规则中,s不变
		return s;
	}
}

map buildMap(ifstream& ifst_trans)
{
	maptrans_map;
	string value, key, trans_value;
	while (ifst_trans >> key && getline(ifst_trans, value))
	{
		//这里value.size() > 1是geiline除了读入空格还读入了其他
		if (value.size() > 1)
		{
			trans_value = value.substr(1);
			trans_map.insert(pair(key, trans_value));
		}
		else
		{
			throw runtime_error("no rule for " + key);
		}
	}
	return trans_map;
	
}

void word_transform(ifstream& ifst_trans, ifstream& ifst_input)
{
	auto trans_map = buildMap(ifst_trans);
	string text;
	//按行读取打印
	while (getline(ifst_input, text))
	{
		istringstream istr(text);
		string word;
		bool firstword = true;
		//每一个单词结束后需要打印空格
		while (istr >> word)
		{
			if (firstword)
			{
				firstword = false;
			}
			else
			{
				cout << " ";
			}

			cout << transform(word, trans_map);
		}
		cout << endl;
	}
}

int main()
{
	ifstream ifst_trans("regular.txt");
	ifstream ifst_input("transform.txt");
	word_transform(ifst_trans, ifst_input);
	system("pause");
	return 0;
}

C++Primer11.3.6节练习_第1张图片

文件regular.txt:

C++Primer11.3.6节练习_第2张图片

 文件transform.txt:

C++Primer11.3.6节练习_第3张图片

  练习11.34:

会发生错误,如果有下标对应的关键字的映射,则返回映射,完成转换

但如果没有下标对应的关键字的映射,会在转换map中创建一个关键字,并将其对应值置为空,也就是说,没有单词转换关系的会被转换为空字符串

练习11.35:

没有影响,结果一样

练习11.36:

buildMap函数中的throw runtime_error会检查输入的合法性

map buildMap(ifstream& ifst_trans)
{
	maptrans_map;
	string value, key;
	while (ifst_trans >> key && getline(ifst_trans, value))
	{
		//这里value.size() > 1是geiline除了读入空格还读入了其他
		if (value.size() > 1)
		{
			trans_map.insert({ key, value.substr(1) });
		}
		else
		{
			throw runtime_error("no rule for " + key);
		}
	}
	return trans_map;
	
}

如果文件中的某一行包含一个关键字、一个空格,然后就结束,那么此时会产生错误

C++Primer11.3.6节练习_第4张图片

 

你可能感兴趣的:(C++基础,c++,开发语言,算法)