- 输入字符串中带空格 使用
getline(cin, s);
其中需要包含头文件#include <string>
- 使用
toupper()
或tolower()
将字符转换大小写 - 数字数组排序后去重
sort(arr.begin(), arr.end());
arr.erase(unique(arr.begin(), arr.end()), arr.end());
- 相同字符串
str1.append(5,"0");
- 数字字符串去重:
- 统计字符串中字符个数
- string中append的用法
string s1 = "wang";
s1.append(3, '!');
// s1 = wang!!!
s.substr(pos, n)
:第一个参数是起始位置,第二个参数是切割长度,单个参数默认pos后全取
/*长度为8拆分每个字符串后输出; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理*/
string str;
while (getline(cin, str)) {
while (str.size() > 8) {
cout << str.substr(0, 8) << endl;
str = str.substr(8);
}
cout << str.append(8 - str.size(), '0') << endl; //不够8位的补0
}
- 判断字符是否为字母、数字或非字母数字
isalpha
isdigit
isalnum
-
如何遍历map,unordered_map?
map<int, char> Map; for (auto & element : Map){ printf("%d, %c\n", element.first, element.second); }
即遍历之后返回的自动类型是一个pair,注意此处map的话返回有顺序的,而unordered_map 没有顺序
-
类型转换
1) char 下的数字到int:char a = '1'; int b = a - '0';
2) int数字到 string:
int a = 12345; string b = to_string(a);
3) string 到int:
string s = "123"; int a = stoi(s);
-
initiliaze 固定size 某数据类型的2D 向量 :
vector<vector<int>> A(m, vector<int>(n, 0))
-
from vector cosntruct initiliaze a unordered_set
vector<int> a = { 1,2,3} unordered_set Set (a.begin(), a.end());
5.用lambda funtion 来定义sort 函数,以252 题为例
sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){return a.start < b.start;});
6.在类中initialize 一个特定size的向量,以303题为例, 即intiliaze 一个向量,然后assign reference
class NumArray{
vector f;
NumArray(){
f = vector<int> (n+1, 0);
}
}
7.在ascii码里,大小写字母之间的差是32,比如 ‘a’ - ‘A’ = 32。
非常常用的技巧:从某一点开始找到相同的一段:Leetcode151
int j = i;
while (j < s.size() && s[j] != ' ') j++;
删除哈希表中重复的value对应的key
验证回文串
class Solution {
public:
bool isPalindrome(string s) {
int i = 0, j = s.size() - 1;
while (i < j){
while (!isalnum(s[i]) && i < j) i++; // 跳过非法字符
while (!isalnum(s[j]) && i < j) j--;
if (toupper(s[i]) != toupper(s[j]))
return false;
i++, j--;
}
return true;
}
};