从本科大三学了 Python 之后,基本就一直在用 Python,除了部分课程作业用 Java 完成项目以及研一暑假时学了一小段时间的 R。
尤其是研二初学会了 Python 的 numpy 和 pandas 库之后,基本也没有再遇到过性能问题。因为我写代码主要是为了科研数据处理,多数情况都可以把问题向量化。
2019 年秋招开始后,也用着 Python 刷了 LeetCode 的前 70 多道题,遇到一些无法向量化的问题,这时候 Python 的性能劣势就体现出来了。其中,最主要的一点是,Python 的封装实在太高级了,在使用时用户对很多内建函数的复杂度都没有概念。所以,花了一周多时间复习完 C++ 语法后,我开始用 C++ 刷 LeetCode。
这篇博文是比较 Python 和 C++ 在字符串处理中的不同。
定义字符串
Python
不区分字符与字符串,单引号与双引号可以替换使用
1 2
| char0 = "A" str0 = "Hello World!"
|
C++
区分字符与字符串,字符用单引号,字符串用双引号
1 2 3 4 5 6
| char c0 = 'A'; char str0[] = "Hello World!";
string str1 = "Hello World!"; string str2(str0); string str3(5, c0);
|
截取字符串
Python
字符串可以用切片截取;字符串是 Immutable,不可修改的
1 2 3 4 5
| str0 = "Hello World!" print(str0[1]) print(str0[1:4])
str0[1] = "A"
|
C++
字符串可以用下标访问或修改对应位置字符
1 2 3 4
| string str1 = "Hello World!"; cout << str1[3] << endl; str1[3] = 'U'; cout << str1 << endl;
|
使用 string
类自带的函数 substr
来截取字符;具体地,substr(pos, n)
返回 pos
开始的 n
个字符组成的字符串
1
| cout << str1.substr(3, 5) << endl;
|
连接字符串
Python
1 2
| str0 = "Hello World!" print(str0 + str0)
|
C++
1 2 3 4 5
| cout << str1 + str2 << endl; str1 += str2; cout << str1 << endl; str1.append(str2); cout << str1 << endl;
|
字符串长度
Python
1 2
| str0 = "Hello World!" print(len(str0))
|
C++
1 2
| cout << str1.size() << " " << str1.length() << endl; cout << str1.empty() << endl;
|
字符串查找
Python
使用 str
类的 find
和 index
函数进行查找;其中,find
在查找失败时返回 -1,而 index
查找失败时报错
1 2 3 4 5 6 7
| str0 = "Hello World!" print("A" in str0) print(str0.find("W")) print(str0.find("A"))
print(str0.index("W")) print(str0.index("A"))
|
C++
使用 string
类的 查找成功时返回所在位置,失败返回 string::npos
的值
1 2 3
| cout << str1.find('o') << endl; cout << str1.find("llo") << endl; cout << str1.find('A') << " " << str1.npos << endl;
|
字符串替换、插入
Python
1 2
| str0 = "Hello World!" print(str0.replace("l", "L"))
|
C++
从下标为 2 的位置开始,删除 4 个字符,并替换为 “ZEW”
1
| str1.replace(2, 4, "ZEW");
|
把 “SYUONI” 插入,并使得其开始位置下标为 2
1
| str1.insert(2, "SYUONI");
|
统计子串出现次数
Python
1 2
| str0 = "Hello World!" print(str0.count("l"))
|
补齐长度
Python
1 2 3
| str0 = "Hello World!" print(str0.ljust(20, "-")) print(str0.rjust(20, "-"))
|
v1.5.2