人的笔记
2025-08-03 15:02:25
发布于:广东
字符与字符串
字符
char 字符类型
-128 ~ 127
大写字母
小写字母
0-9数字
符号
功能符
换行符:\n
末尾结束标志符:\0
如何输入输出字符
char c;
cin >> c;
cout << c;
判断是否是大写字母
char c;
cin >> c;
if (c >= 'A' && c <= 'Z') {
// 大写字母
}
判断是否是小写字母
char c;
cin >> c;
if (c >= 'a' && c <= 'z') {
// 小写字母
}
判断是否是0-9
char c;
cin >> c;
if (c >= '0' && c <= '9') {
// 0-9的数字
}
大写转小写
char c;
cin >> c;
c = c - 'A' + 'a';
小写转大写
char c;
cin >> c;
c = c - 'a' + 'A';
C++字符串
string 字符串
如何获取字符串的字符个数
string s;
cin >> s;
// 获取字符串s的长度
int n = s.size();
如何for循环遍历字符串?
string s;
cin >> s;
for (int i = 0; i < s.size(); i ++) {
// 第 i 个字符是:s[i]
}
如何for循环逆序遍历字符串?
string s;
cin >> s;
for (int i = s.size() - 1; i >= 0; i --) {
// 逆序遍历字符串
}
如何判断回文串?
string s;
cin >> s;
string t;
// 逆序遍历字符串s
for (int i = s.size() - 1; i >= 0; i --) {
t += s[i];
}
if (s == t) {
// 就是回文串
}
进制转换
十进制转 r 进制
十进制转 r 进制的口诀:除r取余,逆序输出
例如,23 转换成二进制:
23 / 2 = 11 ······ 1
11 / 2 = 5 ······ 1
5 / 2 = 2 ······ 1
2 / 2 = 1 ······ 0
1 / 2 = 0 ······ 1
余数逆序输出:10111
十进制转r进制代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int a[1001];
int cur;
int main()
{
cin >> n;
while (n) {
a[cur] = n % 8;
cur ++;
n /= 8;
}
int cnt = 0;
for (int i = cur - 1; i >= 0; i --) {
cout << a[i];
if (a[i] == 7) {
cnt ++;
}
}
cout << ' ' << cnt;
return 0;
}
r 进制转换成十进制
口诀:每一位乘上他对应的位权,最后加在一起
比如二进制的 10111
1 0 1 1 1
2^4 2^3 2^2 2^1 2^0
2^4 + 2^2 + 2^1 + 2^0 = 23
原码反码补码
正数:正数的原码、反码、补码都一样,都是二进制表示
负数:
负数的原码,除了符号位与正数的不一样之外,其他都一样
反码等于原码取反,但符号位不变
补码等于反码+1
位运算
按位与:先转换成二进制,再一位一位的比较,都是 1 才是 1,有一个 0 就是 0
按位或:先转换成二进制,每一位进行比较,有 1 就是 1,都是 0 才是 0
按位异或:先转换成二进制,每一位进行比较,不同就是 1,相同是 0
按位取反:每一位都取反,0变成1,1变成0
左移 1 位,相当于乘一个 2
左移 x 位,相当于乘
2
x
2
x
右移 1 位,相当于除一个 2
右移 x 位,相当于除
2
x
2
x
初赛知识
/**
*
- 十进制转 2 进制的口诀:除2取余,逆序排列
- 十进制转 k 进制的口诀:除k取余,逆序排列
- 如果有小数的话,如何转成 2 进制
- 先分开:整数、小数两个部分
- 整数:除2取余,逆序排列
- 小数:乘2取整,顺序排列
- 如果有小数的话,如何转成 k 进制
- 先分开:整数、小数两个部分
- 整数:除k取余,逆序排列
- 小数:乘k取整,顺序排列
- 2进制转10进制:每一位乘上对应的位权,然后累加
- 中缀表达式
- 前缀表达式
- 后缀表达式
- 如何将中缀转换成前缀、后缀
- 并且前缀、后缀表达式是如何算出答案
- 中缀转前缀的步骤:
-
- 先弄出运算符的执行顺序
-
- 根据这个顺序,加括号
-
- 把运算符提取到对应括号的前面
-
- 删除括号
- 栈:是一个底部密封的管道
-
先进去的最后出来
- 前缀表达式的计算过程:
-
- 从右往左扫描
-
- 遇到数字就丢入栈中
-
- 遇到运算符,就从栈里面拿两个数出来运算
-
- 算出来后,再丢进去
- 中缀转后缀的步骤:
-
- 先弄出运算符的执行顺序
-
- 根据这个顺序,加括号
-
- 把运算符提取到对应括号的后面
-
- 删除括号
- 栈:是一个底部密封的管道
-
先进去的最后出来
- 后缀表达式的计算过程:
-
- 从左往右扫描
-
- 遇到数字就丢入栈中
-
- 遇到运算符,就从栈里面拿两个数出来运算,
- 谁先拿出来,谁放右边运算
-
- 算出来后,再丢进去
- 在机器码中,二进制的最高位称为符号位
-
- 0 表示正数
-
- 1 表示负数
- 正数的原码、反码、补码:
-
- 正数的原码反码补码都一样,都是它的二进制
- 10 -> 二进制是多少?1010
- -> 原码:00001010
- -> 反码:00001010
- -> 补码:00001010
- -> 都一样,都是他的二进制表示
- 负数的原码、反码、补码:
-
- 负数的原码:就是它的二进制,只不过最高位是 1
-
- 负数的反码:就是原码的最高位不变,其他都取反
-
- 负数的补码:就是反码 + 1
- -10 -> 二进制表示:1010
-
-> 原码:10001010
-
-> 反码:11110101
-
-> 补码:11110110
- 二进制运算,在计算机里面针对的是补码:
- 二进制与运算 &:一位一位的比较,都是 1 才是 1
- 二进制或运算 |:一位一位的比较,有 1 就是 1
- 二进制取反运算 ~:一位一位的取反,0变1,1变0
- 二进制异或运算 ^:一位一位的比较,不同就是 1,相同就是 0
- 二进制左移运算 <<:左移 x 位,相当于乘 2^x
- 二进制右移运算 >>:右移 x 位,相当于除以 2^x
- 从 n 个人里面,选择 m 个人出来排队,总共有:
-
- A(n, m) 种方法
-
- A(n, m) = n! / (n-m)!
- 0! = 1
- 从 n 个人里面,抽出 m 个人出来,有多少种方法:
-
- C(n, m) 种方法
-
- C(n, m) = n! / (m!(n-m)!)
这里空空如也
有帮助,赞一个