函数重载练习(2)
题目描述
补全代码,实现不同类型的加法:
- add(int, int)和add(double, double):返回参数的和
- add(str, str):分配并创建新的字符串,它是两字符串按顺序拼接的结果
- add(str, char):分配并创建新的字符串,它是字符串后拼接字符的结果
关于输入
输入共六行,字符串长度保证结果可存储在内存中
第一行:两个整数
第二行:两个浮点数
第三行到第五行:一个整数n和一个字符串,n代表字符串长度
第六行:一个字符
关于输出
输出共四行
第一行:整数加法结果
第二行:浮点数加法结果
第三行:前两个字符串加法结果
第四行:最后一个字符串加字符的结果
易错点提示
new[]
与delete[]
相互对应;不能delete[]
局部变量或全局变量的内存。new[]
后接初始化,可以保证所有内存的内容都是妥善的。- C 风格字符串结尾的空字符(
'\0'
)不要忘记。
参考答案
#include <iostream>
#include <cstring>
using std::cin, std::cout, std::endl;
int add(int a, int b);
double add(double a, double b);
char* add(const char* a, const char* b);
char* add(const char* a, char b);
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
char* add(const char* a, const char* b) {
int len_a = std::strlen(a);
int len_b = std::strlen(b);
char* str_ptr = new char[len_a + len_b + 1];
std::strcpy(str_ptr, a);
std::strcpy(str_ptr + len_a, b);
return str_ptr;
}
char* add(const char* a, char b) {
int len_a = std::strlen(a);
char* str_ptr = new char[len_a + 2];
std::strcpy(str_ptr, a);
str_ptr[len_a] = b;
str_ptr[len_a + 1] = '\0';
return str_ptr;
}
char* read_str_from_cin() {
int len;
cin >> len;
char* s = new char[len + 1];
// c++20后不支持,请暂时调整为c++17
cin >> s;
return s;
}
int main() {
// 整数加法
int i1, i2;
cin >> i1 >> i2;
cout << add(i1, i2) << endl;
// 浮点数加法
double d1, d2;
cin >> d1 >> d2;
cout << add(d1, d2) << endl;
// 字符串加法
char* str_ptr;
char* s1 = read_str_from_cin();
char* s2 = read_str_from_cin();
str_ptr = add(s1, s2);
cout << str_ptr << endl;
delete[] str_ptr;
delete[] s1;
delete[] s2;
// 字符串加字符
char* s3 = read_str_from_cin();
char c;
cin >> c;
str_ptr = add(s3, c);
cout << str_ptr << endl;
delete[] str_ptr;
delete[] s3;
}