C++ Primer: Chapter 5 Statement

Homework

Test 5.9

int main()
{
	int cnt = 0;
	char c;

	while (cin >> c)
	{
		switch (c)
		{
			case 'a':
			case 'e':
			case 'i':
			case 'o':
			case 'u':
				++cnt;
				break;

		}
	}

	cout << "元音字母共有" << cnt << "个" << endl;
	return 0;
}

Test 5.11

int main()
{
	int cnt = 0;
	int sign_tab = 0;
	int sign_space = 0;
	int sign_newline = 0;
	char c;

	//设置了std::noskipws 标志,该标志禁止跳过空白、换行和制表字符。
	while (cin >> std::noskipws >> c)
	{
		switch (c)
		{
			case 'a':
			case 'e':
			case 'i':
			case 'o':
			case 'u':
				++cnt;
				break;
			case '\n':
				++sign_newline;
				break;
			case '\t':
				++sign_tab;
				break;
			case ' ':
				++sign_space;
				break;

		}
	}

	cout << "元音字母共有" << cnt << "个" << endl;
	cout << "换行符共有" << sign_newline << "个" << endl;
	cout << "制表符共有" << sign_tab << "个" << endl;
	cout << "空格共有" << sign_space << "个" << endl;
	return 0;
}

Test 5.12

int main()
{
	int ff_cnt = 0, fl_cnt = 0, fi_cnt = 0;
	char c;
	char c_last = '\0';

	while (cin >> c)
	{
		if (c_last == 'f')
		{
			switch (c)
			{
			case 'f':
				++ff_cnt;
				break;

			case 'l':
				++fl_cnt;
				break;
			case 'i':
				++fi_cnt;
				break;

			}
		}
		c_last = c;
	}

	cout << "ff共有" << ff_cnt << "个" << endl;
	cout << "fl共有" << fl_cnt << "个" << endl;
	cout << "fi共有" << fi_cnt << "个" << endl;

	return 0;
}

Test 5.14

int main()
{
	int cnt = 1;
	string str, str_last = " ";

	while (cin >> str)
	{
		if (str == str_last)
		{
			++cnt;
		}
		else
		{
			if(cnt >1)
				cout << str_last << "连续出现了" << cnt << "次" << endl;
			cnt = 1;
		}
		str_last = str;
	}

	if (cnt > 1)
		cout << str_last << "连续出现了" << cnt << "次" << endl;

	return 0;
}

Test 5.17

int main()
{
	vector<int> ivec1 = { 0, 1, 1, 2 };
	vector<int> ivec2 = { 0,1,1,2,3,5,8 };

	vector<int> svec, lvec;

	//Compare two ivec
	if (ivec1.size() < ivec2.size())
	{
		svec = ivec1;
		lvec = ivec2;
	}
	else
	{
		svec = ivec2;
		lvec = ivec1;
	}

	//whether it is a prefix
	decltype(svec.size()) i = 0;
	while (i < svec.size())
	{
		if (svec[i] == lvec[i])
			++i;
		else
		{
			cout << "not a prefix" << endl;
			break;
		}
	}
	if (i == svec.size())
		cout << "is a prefix" << endl;



	return 0;
}

Test 5.19

int main()
{
	
	do
	{
		cout << "请输入两个string:" << endl;
		string str1, str2;
		cin >> str1 >> str2;
		if (str1.size() < str2.size())
			cout << str1 << endl;
		else if (str2.size() < str1.size())
			cout << str2 << endl;
		else
			cout << "same" << endl;
	} while (true);

	return 0;
}

Test 5.20

int main()
{
	
	string word, word_last;

	while (cin >> word)
	{
		if (word == word_last)
			break;
		word_last = word;
	}

	return 0;
}

Test 5.21

int main()
{
	
	string word, word_last;

	while (cin >> word)
	{
		if (word == word_last)
		{
			if (isupper(word[0]))
				break;
			else
				continue;
		}
			
			
		word_last = word;
	}

	return 0;
}

Test 5.25

int main()
{
	
	int ival1, ival2;
	while(cin >> ival1 >> ival2)
	{
		try
		{
			//如果ival2 == 0,抛出异常并跳转到对应的catch语句
			if (ival2 == 0)
				throw runtime_error("the second value is 0");
				//如果不用try语句,这里一般直接cerr:
				//cerr << "the second value is 0" << endl;
			else
			{
				cout << ival1 / ival2 << endl;
				break;
			}
				
		}
		catch (runtime_error err) {
			cout << err.what() << endl;
			cout << "try again? (y/n)" << endl;
			char a;
			cin >> a;
			if (a == 'y')
				continue;
			else if(a == 'n')
				break;
		}
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值