近期博客更新停滞不前,不是放弃学习,而是买的书终于到了,转到了线下。啃了快一周的《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’
函数中还体现的一些函数数组变量,以及数组返回知识就不做赘述。