C++ Primer 3.2.3~3.5.3部分节练习

4 篇文章 0 订阅
4 篇文章 0 订阅

备忘录

// ConsoleApplication1.cpp: 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <string>//使用字符串需要包含<string> 
#include <vector>
using namespace std;
using std::vector;

struct Sales_date//一个结构体
{
	std::string bookNo;
	unsigned unite_sold = 0;
	double revenue = 0.0;
};
int main()
{
	/*
	string s,s2;
	cout << "输入一个字符串:" << endl;
	cin >> s>>s2;
	cout << s << "," << s2 << endl;
	system("pause");
	return 0;
	*/
	/*
	//使用getline()读取一行
	//size()函数返回一个string的长度,注意:返回类型为string:size_type而非int
	string line;
	cin >> line;
	cout << line << endl;
	system("pause");
	return 0;
	*/

	//----------------------3.2.3处理string对象中的每个字符-----------------------
	//c++11提供了一种新的循环形式,相当于foreach(java)
	//
	/*
	string str("hello world");
	for (auto c:str)//使用字符变量c来遍历str中的每个元素
	{
		cout << c << endl;
	}*/

	//下面的例子查找一个字符串中的标点个数
	/*
	string s("hello, world!!");
	//decltype (s.size()) cnt = 0;
	string::size_type cnt = 0;//二者等价
	for (auto c : s)
	{
		if (ispunct(c))
		{
			cnt++;
		}
	}
	cout << "共有"  << cnt << "个标点符号在句子" << s << "中" <<endl;
	*/

	/*string s("hello world");
	for (auto &c : s)
	{
		if (islower(c))
		{
			c = toupper(c);
		}
	}
	cout << s << endl;
	*/

	//同样可以使用下表来访问string中的某个字符(元素),注意string[]索引符使用的是size_type类型,也即为什么可以使用
	//str[str.size(-1)]访问str的最后一个字符
	//使用下标执行迭代:str中的第一个单词改为大写
	/*
	string str("hello world");
	for (decltype (str.size()) i = 0; i != str.size() && !isspace(str[i]); i++)
	{
		str[i] = toupper(str[i]);
	}
	cout << str << endl;
	*/
	//----------------------3.2 p85 使用下标执行随机访问//----------------------
	/*
	const string hexdigits = "0123456789ABCDEF";//可能的十六进制数
	cout << "输入一个0到15的十进制数字,用空格分隔,按下回车以完成" << endl;
	string result;//结果
	string::size_type n;//保存从输入流读入的数
	while (cin >> n)
	{
		if (n < hexdigits.size())//忽略无效输入
		{
			result += hexdigits[n];//得到对应的十六进制数
		}
	}
	cout << "十六进制数为:"<<result<<endl;
	cout << "n:" << (int)n << endl;
	*/
	//----------------------3.3 标准库类型vector//----------------------
	//使用vector要包含头文件:#include <vector>,using std:vector
	//c++中的vector是一个类模版
	//模版本身不是类或函数,可以将模版看作编译器生成类或函数编写的一份说明
	----------------------3.3.2节练习//----------------------
	/*
	vector<string> svec;//svec不含任何元素
	vector<int> intVec;
	int n = 0;
	int num;
	while (n < 5 && cin>>num)
	{
		//cin>>num;
		intVec.push_back(num);
		n++;
	}
	cout << "elements of intVec are:" << endl;
	for (int i = 0; i < intVec.size(); i++)
	{
		cout << intVec[i] << ",";
	}
	*/
	/*
	vector<int> v{ 1,2,3,4,5,6,7,8,9 };
	for (auto &i : v)
	{
		i *= i;
	}
	for (auto i : v)
	{
		cout << i << ",";
	}
	*/
	//----------------------3.3.3 节练习//----------------------
	//3.17:
	/*
	vector<string> text;
	int n = 0;
	while (n < 5)
	{
		string temp;
		cin >> temp;
		text.push_back(temp);
		n++;
	}
	for (decltype(text.size()) i=0; i != text.size(); i++)
	{
		for (auto &var : text[i])
		{
			if (!isupper(var))
			{
				var=toupper(var);
			}
		}
	}
	for (auto var : text)
	{
		cout << var << endl;
	}
	*/
	//----------------------3.4 迭代器//----------------------
	//以下例子展示了使用迭代器把String的第一个字符改为大写形式
	/*
	string s("some string");
	if (s.begin() != s.end())
	{
		auto it = s.begin();
		*it = toupper(*it);
	}
	cout << s << endl;
	*/
	//以下例子通过循环配合迭代器将字符串中的所有字符变成大写
	/*string s("some string");
	//for (auto it = s.begin(); it != s.end(); it++)
	//{
	//	if (isspace(*it))
	//	{
	//		continue;
	//	}
	//	*it = toupper(*it);
	//}
	cout << s << endl;
	*/
	//----------------------3.4.2 节练习 练习3.24//----------------------
	/*
	unsigned grade;
	vector<unsigned> scores(11,0);//11个0
	int n = 0;
	while (cin >> grade && n<scores.size())
	{
		if (grade < 100)
		{
			unsigned index=grade / 10;
			auto it = scores.begin()+index;
			*it+=1;
		}
		n++;
	}
	for (auto temp : scores)
	{
		cout << temp << endl;
	}
	*/
	//----------------------3.5.3 指针和数组//----------------------
	//使用指针遍历数组
	/*
	int arr[] = { 1, 2,3, 4, 5, 6, 7, 8, 9, 10 };//C++中的数组定义方式与C语言类似
	int *p = begin(arr);
	while (p != end(arr))//end和begin函数返回数组的尾后/头指针
	{
		cout << *p << endl;
		p++;
	}
	*/


	//----------------------3.5.3 节练习//----------------------
	//下列代码利用指针将数组中的各元素置0
	/*
	int arr[]={ 1,2,3,4,5,6,7,8,9,10 };
	auto *p = arr;
	while (p != end(arr))
	{
		*p = 0;
		cout << *p << endl;
		p++;
	}
	*/
	//以下是C语言标准库中的一些对Sting提供操作的函数,他们在C++中也同样适用,这些函数在C++中包含在cstring中
	//strlen(p)//长度,strcmp(p1,p2)比较,如果p1<p2,返回一个负值,strcat(p1,p2)p2加到p1后,strcpy(p1,p2)p2拷贝给p1,返回p1
	//----------------------3.5.5 节练习//----------------------
	vector<int> ivec{1, 2, 3, 4, 5};
	int arr[5];
	auto p = ivec.begin();
	int *t = arr;//首地址
	int i = 0;
	while (p < ivec.end())
	{
		*t++ = *p++;
	}
	for (int temp : arr)
	{
		cout << temp << endl;
	}
	system("pause");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值