- 输入字符串中带空格 使用
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
}
- 判断字符是否为字母、数字或非字母数字
isalphaisdigitisalnum
-
如何遍历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_setvector<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;
}
};

本文详细介绍了C++编程中的实用技巧,包括字符串处理、数据结构操作、算法优化及类型转换等,特别强调了map和unordered_map的遍历、KMP算法的应用以及常见字符串函数的使用。
349

被折叠的 条评论
为什么被折叠?



