C++ Primer第三章习题

习题3-2

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;
	cout << "Please Input Your Name;" << endl;
	getline(cin,s);
	cout << s << endl;
	return 0;
}

习题3-4

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1,s2;
	cin >> s1 >> s2;
	if (s1==s2)
		cout << "They Are The Same" << endl;
	else
	{
		if (s1 > s2)
			cout << s1 << endl;
		else
			cout << s2 << endl;
	}
	return 0;
}
#include <iostream>
#include <string>

using namespace std;

int main()
{	
	string s1,s2;
 	cin >> s1 >> s2; 
 	if (s1.size()==s2.size())
		cout << "Their Length Are the same" << endl;
	else
	{
		if (s1.size()>s2.size())
			cout << s1 << endl;
		else
			cout << s2 << endl;
	}
	return 0;
		

}

习题3-5:string对象相加的练习

#include <iostream>
#include <string>

using namespace std;

int main()
{
	
	string longStr,s;
	while (getline(cin,s))
	{
		if (s=="q")
			break;
		longStr+=s;
		longStr+=" ";
	}
	cout << longStr << endl;
	return 0;
}

习题3-6:
传统做法

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
	cout << "Please input a string" << endl;
	string s ;
       	getline(cin,s);
	for (int i = 0;i != s.size();++i)
	{
		if (isgraph(s[i]))
			s[i]='X';
	}
	cout << s << endl;
	return 0;
}

习题3-7:
范围循环

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
	cout << "Please input a string" << endl;
	string s ;
       	getline(cin,s);
	for (char &c : s)
	{
		if (isgraph(c))
			c ='X';
	}
	cout << s << endl;
	return 0;
}

习题3-10:

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
		cout << "Please input a string with punctuation" << endl;
		string s;
		getline(cin,s);
		for (auto c : s)
		{
			if (!ispunct(c))
					cout << c;
		}
		cout << endl;
		return 0;
}

习题3-11:
注意这里c的类型为const char&

习题3-12:
vector的初始化
一般来说:花括号是列表,圆括号是构造以此区分直接初始化或者列表初始化。
(a)正确;
(b)错误,拷贝初始化要确保类型相同;
©正确,svec为10个类型为“null”组成的vector。

习题3-13:
(a)v1是空vector
(b)v2有10个0[int];
©v3有10个42[int];
(d)v4仅有1个元素10[int];
(e)v5有两个元素10,42[int]
(f)v6有10个""[string],因为10并不是string类型,编译器默认将其看作vector v6(10);
(g)v7有10个“hi“[string];

习题3-14:
push_back的使用

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
		int i;
		vector<int> veci;
		while (cin >> i)
		{
				if (i==-100)
						break;
				veci.push_back(i);
		}
		cout << veci.size() << endl;
		return 0;
}

习题3-15与上面差不多

习题3-17:

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
using namespace std;

int main()
{
		string word;
		vector<string> words;
		while (cin >> word)
		{
				if (word == "q")
						break;
				
				for (auto &c : word)
				{
						c=toupper(c);
				}
				words.push_back(word);
				
		}
		for (auto w : words)
				cout << w << endl;
		return 0;
}

习题3-20:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
		int i;
		vector<int> veci;
		while(cin >> i)
		{
				if (i==-1000)
						break;
				veci.push_back(i);	

		}
		for (int j = 1; j!=veci.size();++j)
				cout << veci[j-1] + veci[j] << endl;
		return 0;
}
#include<iostream>
#include<vector>

using namespace std;

int main()
{
		int i;
		vector<int> veci;
		while(cin >> i)
		{
				if (i==-1000)
						break;
				veci.push_back(i);	

		}
		for (int j = 0; j!=veci.size()/2;++j)
				cout << veci[j] + veci[veci.size()-1-j] << endl;
		return 0;
}

习题3-23:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
		vector<int> veci(10,1);
		for (auto iter = veci.begin(); iter!=veci.end();++iter)
				*iter += *iter;
		for (int i : veci)
				cout << i << endl;
		return 0;
}

习题3-24:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
		int i;
		vector<int> veci;
		while(cin >> i)
		{
				if (i==-1000)
						break;
				veci.push_back(i);
		}
		for (auto iter = veci.begin(); iter != veci.end(); ++iter)
				cout << *iter + *(iter+1) << endl;
		return 0;
}

习题3-25:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
		vector<unsigned> scores(11,0);
		unsigned grade;
		auto iter = scores.begin();
		while (cin >> grade)
		{
				if (grade == -1)
						break;
				if (grade <= 100)
				{
						int scope = grade/10;
						(*(iter+grade/10))++;
				}
		}
		for (auto i : scores)
				cout << i << ' ' ;
		return 0;

}

习题3-31:

#include <iostream>

using namespace std;

int main()
{
		int num[10];
		for (int i = 0; i < 10; ++i)
				num[i] = i;
		cout << *num << endl;
		return 0;
}

习题3-32

#include <iostream>

using namespace std;

int main()
{
		int num[10];
		for (int i = 0; i < 10; ++i)
				num[i] = i;
	    	int numCopy[10];
	    	for (int i = 0; i < 10; ++i)
				numCopy[i] = num[i];	
		return 0;
}
#include <iostream>
#include <vector>

using namespace std;

int main()
{
		vector<int> num;
		for (int i =0; i < 10; ++i)
				num.push_back(i);
	    	vector<int> numCopy;
	    	for (auto i : num)
		{
				numCopy.push_back(i);
				cout << i << endl;
		}

		return 0;
}

习题3-35:

#include <iostream>

using namespace std;

int main()
{
		cout <<"Now, Please add some numbers into a blank array" << endl;
		int i;
		int num[10]={};
		int *b = num, *e = num +10;
		while (b < e) 
		{
				if (i== -1)
						break;
				cin >> *b;
				++b;
		}
		for (int j = 0; j < 10; ++j)
				cout << num[j] << ' ';
		cout << endl;
		b = num;
		while (b < e)
		{
				*b=0;
				cout << *b << ' ';
				++b;
		}
		cout << endl;
		return 0;
		

}

习题3-36:

#include <iostream>

using namespace std;

int main()
{
		cout <<"Now, Please add some numbers into a blank array" << endl;
		int i;
		int num1[10]={}, num2[10]={};		
		int *b1 = num1, *e1 = end(num1);
		int *b2 = num2, *e2 = end(num2);
		auto n1 = e1 - b1, n2 = e2 -b2;
		cout << "Now, the first array" << endl;
		while (b1 < e1)
		{
				cin >> *b1;
				++b1;
		}
		cout << "Now, The second array" << endl;
		while (b2 < e2)
		{
				cin >> *b2;
				++b2;
		}
		if (n1 != n2)
		{
				cout <<"The two arrays are not equal" << endl;
				return 0;
		}
		b1 = num1; b2 = num2;
		while (b1 < e1)
		{
				if ( *b1 != *b2)
				{
						cout << "The two arrays are not equal" << endl;
						return 0;
				}
				++b1;++b2;
		}
		cout << "The two arrays are totally equal" << endl;
		return 0;
}



#include <iostream>
#include <vector>

using namespace std;

int main()
{
		cout <<"Now, Please add some numbers into a blank array" << endl;
		vector<int> num1, num2;
		cout <<"Now, The first one" << endl;
		int i;
		while ( cin >> i)
		{
				if (i == -1)
						break;
				num1.push_back(i);
		}
		cout << "Now, The second one" << endl;
		while (cin >> i)
		{
				if (i == -1)
						break;
				num2.push_back(i);
		}
		auto n1 = num1.size(), n2 = num2.size();
		if (n1 != n2)
		{
				cout <<"The two arrays are not equal" << endl;
				return 0;
		}
		for (int j = 0; j != n1; ++j)
		{
			if (num1[j] != num2[j])
			{	
				cout <<"The two arrays are not equal" << endl;
				return 0;
			}
		}
		cout << "They are completely equal" << endl;
		return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值