Nick Hillier @ unsplash.com
计算机底层是一堆逻辑电路,记录信息只能以数值的形式。
因此对于一个字符 a
,计算机记录其为值 97
。
这个值与字符的对应关系是人们约定好的,这里使用的对应表为 ASCII Table 。
在 ASCII Table 里, a
对应 97
, b
对应 98
... 字符 1
对应数值 49
。
之所以写这篇笔记是因为一些算法题的要求,比如,我们需要统计 26 个小写英文字母出现频率,在算法题中,完全没必要开一个哈希表,开一个 26 长度的整数数组就行。
代码语言:javascript复制int cnt[26];
当我们读入一个字符时,则进行一次强制类型转换,就实现了哈希表功能。
代码语言:javascript复制char c;
cin >> c;
cnt[c - 'a'] ;
当读入的数字是 'a'
时, 'a' - 'a' == 0
,则实现了哈希的功能。
我不禁发问:
- 上述过程的逆过程如何实现呢?比如给我数值
97
,我如何才能得到其在 ASCII 表里对应的字符'a'
? - 如果在字面上转换呢?
- 比如给我数值
97
,我如何才能得到字符串"97"
? - 比如给我字符串
"97"
,我如何才能得到数值97
?
- 比如给我数值
不熟悉的话,做题时容易被卡脖子。在此总结 C
和 Python
。
C
数字到字符(ASCII码)
代码语言:javascript复制// 强制转换,根据 ASCII 码
int tmp = 97;
char ac = tmp;
cout << ac << endl; // 输出 a
数字到字符串(表面值)
代码语言:javascript复制int tmp = 97;
string as = to_string(tmp);
cout << as << endl; // 输出 97
字符到数字(ASCII码)
代码语言:javascript复制char a;
cin >> a;
int num1 = a - '0';
int num2 = a - 'A';
int num3 = a - 'a';
字符串到数字(表面值)
代码语言:javascript复制string b;
cin >> b;
int num4 = stoi(b);
float num5 = stof(b);
double num6 = stod(b);
long double num7 = stold(b);
Python
数字到字符(ASCII码)
代码语言:javascript复制# 强制转换,根据 ASCII 码
tmp: int = 97
ac: str = chr(tmp)
print(ac) # 输出 a
数字到字符串(表面值)
代码语言:javascript复制tmp: int = 97
a_s: str = str(tmp);
print(a_s) # 输出 97
字符到数字(ASCII码)
代码语言:javascript复制a: str = 'a'
num: int = ord(a)
print(num)
字符串到数字(表面值)
代码语言:javascript复制b: str = "123"
c: str = "123.45"
num2: int = int(b)
num3: float = float(c)
print(num2) # 123
print(num3) # 123.45