从零开始的cpp学习(七)
类与结构体
类
类的定义
1 | class Person |
类中的变量和函数被统一称为类的成员变量。
private
后面的内容是私有成员变量,在类的外部不能访问;public
后面的内容是公有成员变量,在类的外部可以访问。在类中,如果不表明是私有变量还是公有变量则默认是私有变量。
类的使用
1 |
|
结构体
结构体的定义
1 | struct Person |
构造函数
1 |
|
另一种构造函数写法
1 | struct Person(int _age, int _height, double _money) : age(_age), height(_height), money(_money); |
指针和引用
指针
指针指向存放变量的值的地址。因此我们可以通过指针来修改变量的值。
1 |
|
输出
1 | 10 |
数组名是一种特殊的指针:
1 |
|
输出
1 | 0x61fe00 |
在指针类型不同时直接对指针进行+1
操作,指针的地址变化也不同,如int
型变量是4个字节,所以下一个地址是这个地址加4,而char
型就是加2:
1 |
|
输出
1 | 0x61fdf0 |
引用
引用和指针类似,相当于给变量起了一个别名。
1 |
|
输出
1 | 15 |
atoi
和stoi
都可以用于将字符串转换为整数,
1 | atoi(str.c_str()); |
链表
1 |
|
例题
斐波那契数列
输入一个整数 n,求斐波那契数列的第n项。
假定从 0开始,第 0项为 0。
输入样例
1
5
输出样例
1
5
解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using namespace std;
class Solution {
public:
int Fibonacci(int n) {
int dp[40];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i ++)
dp[i] = dp[i - 1] + dp[i - 2];
return dp[n];
}
};
int main()
{
int n;
cin >> n;
Solution solution;
cout << solution.Fibonacci(n) << endl;
return 0;
}替换空格
请实现一个函数,把字符串中的每个空格替换成
%20
。数据范围
0≤输入字符串的长度 ≤1000
注意输出字符串的长度可能大于 1000输入样例
1
"We are happy."
输出样例
1
"We%20are%20happy.
解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using namespace std;
class Solution {
public:
string replaceSpaces(string &str) { //此处使用&str引用,避免创建副本占用内存
string res;
for (auto c : str) //for循环遍历str,自动判断类型
{
if (c == ' ')
res += "%20";
else
res += c;
}
return res;
}
};
int main()
{
Solution solution;
string s;
getline(cin, s);
cout << solution.replaceSpaces(s) << endl;
return 0;
}求1+2+…+n
求
1+2+…+n
,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句(A?B:C)
数据范围
1≤n≤50000
输入样例
1
10
输出样例
1
55
解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using namespace std;
class Solution {
public:
int getSum(int n) {
int res = n;
n > 0 && (res += getSum(n - 1)); //如果n > 0,则执行后面的否则不执行
return res;
}
};
int main()
{
int n;
cin >> n;
Solution solution;
cout << solution.getSum(n) << endl;
return 0;
}左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如输入字符串”abcdefg”和数字 2,该函数将返回左旋转 2位得到的结果”cdefgab”。
数据范围
输入字符串长度 [0,1000]
输入样例
1
2abcdefg
2输出样例
1
cdefgab
解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using namespace std;
class Solution {
public:
string leftRotateString(string str, int n) {
int len = str.size();
if (len == 0 || n >= len || n <= 0)
return str;
reverse(str.begin(), str.end());
reverse(str.begin(), str.end() - n);
reverse(str.end() - n, str.end());
return str;
}
};
int main()
{
string str;
int n;
cin >> str;
cin >> n;
Solution solution;
cout << solution.leftRotateString(str, n) << endl;
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 EpisodeXIII!