C++ 学习若干杂项知识小结(1)

近期博客更新停滞不前,不是放弃学习,而是买的书终于到了,转到了线下。啃了快一周的《C++ Primer Plus》,比想象中的难。随手写个博客,总结点知识,换换脑子。

先上代码:
该段代码融合了字符串数组,string对象,函数指针变量,数组动态存储,几种输入方法。该代码的实现一定有更简单的方法,写这么复杂为的是能够 将几个知识串起来。

//以下是输入输出结果示例
What is your first name?
guo liang
What is your last name?
shi
shi, guo liang
What letter grade do you deserve?
B
What is your age?
23
Name: shi, guo liang
Grade: B
Age: 23
#include<iostream>
#include<string>

using namespace std;

char *pt(const char[], const string);
void show(const char[], char, int);

void main()
{
	cout << "What is your first name? " << endl;
	char first_name[50];
	cin.getline(first_name, 50);                     // 知识点一
	cout << "What is your last name? " << endl;
	string last_name;
	cin >> last_name;
	//getline(cin, last_name); //string 对象获得字符串另外的方法
	char *out = pt(first_name, last_name);
	cout << out << endl;
	cout << "What letter grade do you deserve? " << endl;
	char grand;
	cin >> grand;
	cout << "What is your age? " << endl;
	int age;
	cin >> age;
	show(out, grand, age);
}

char *pt(const char arr[], const string str)
{
	int len_char = strlen(arr);
	int len_str = str.size();
	char *ptr = new char[len_char + len_str + 2 + 1];  //知识点二
	int i;
	for (i = 0; i < len_str; i++)
		ptr[i] = str[i];
	ptr[i] = ',';
	*(&ptr[i] + 1) = ' ';
	len_str = len_str + 2;
	while (*arr) {
		ptr[len_str++] = *arr;
		arr++;
	}
	ptr[len_char + len_str + 2] = '\0';
	return ptr;
}

void show(const char arr[], char grand, int age)
{
	cout << "Name: " << arr << endl;
	cout << "Grade: " << grand << endl;
	cout << "Age: " << age << endl;
}

知识点一:输入字符串的几种函数对比

cin //遇到空格换行符就停止输入,因此不能输入带空格的字符串。
cin.getline(NAME, NUM) //两个参数,第一个是存储输入的数组,第二个是读取的字符个数,防止越界,该函数会丢弃输入流中的换行符。
cin.get(NAME, NUM) // 参数同cin.getline但是会保留输入流中的换行符
cin.get(NAME, NUM).get() //等价于cin.getline(NAME, NUM)
getline(cin,string) //专用于string对象的输入,因为string对象自动变更大小,因此无需设置对象的存储空间大小。

知识点二:new 构建动态数组
构建动态数组的目的是为了减少内存浪费。由于数组在使用定义初始化的过程中,必须要指定其空间大小。因此会给数组的存储带来很多不便。new动态数组的构建,提供了解决办法。

typeName * pointer_name= new typeName;     //左值一定是指针

int * p1 = new int;
double * p2 = new double;
char * p3 = new char[n+1];   //定义字符串数组时,会比实际的字符串数多1.目的是为了存放‘\0’

函数中还体现的一些函数数组变量,以及数组返回知识就不做赘述。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值