做华为的试题,发现有很多需要字符串重复相关知识的。现在补上:
#include <stdio.h> #include <stdlib.h> #include <string> #include <string.h> #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(int argc, char** argv) { string a; int bit[62] = {0}; cin >> a; //按字母顺序 for (int i = 0; i < a.size(); i++) { if (a[i] >= ‘a‘&&a[i] <= ‘z‘) { bit[a[i] - ‘a‘]++; } if (a[i] >= ‘A‘&&a[i] <= ‘Z‘) { bit[a[i] - ‘A‘ + 26]++; } if (a[i] >= ‘0‘&&a[i] <= ‘9‘) { bit[a[i] - ‘0‘ + 52]++; } } for (int i = 0; i < 62; i++) { if (bit[i] != 0) { if (i <= 25) { printf("%c:%d\n", i + ‘a‘, bit[i]); } else if (i >= 26 && i <= 51) { printf("%c:%d\n", i - 26 + ‘A‘, bit[i]); } else { printf("%c:%d\n", i - 52 + ‘0‘, bit[i]); } } } //按字母出现先后顺序 vector<char> aa{ a[0] }; vector<int> bb{1}; for (int i = 1; i < a.size(); i++) { bool flag = true; for (int j = 0; j < aa.size(); j++) { if (a[i] == aa[j]) { flag = false; bb[j]++; break; } } if (flag) { aa.push_back(a[i]); bb.push_back(1); } } for (int i = 0; i < aa.size(); i++) { cout << aa[i] << ":" << bb[i] << endl; } return 0; }
直接统计的,思想是给个数组,ascii最多也就256个,如果什么字符都有就申请256的int,否则就52个。然后可以按照a-z,A-Z,0-9的顺序输出。
另一种:按照字符串出现顺序输出,需要两个辅助空间,一个存储先出现的字符,一个是对应的出现次数。
时间: 2024-10-24 17:54:01