字符串的应用¶
统计字符¶
一个由大小写字母、数字组成的字符串,
统计26个大写字母、26个小写字母、10个数字字符出现的次数
int cntA[30], cnta[30], cnt[15];
int main() {
string s;
cin >> s;
for (auto c : s) {
if (c >= 'A' && c <= 'Z') cntA[c - 'A']++;
if (c >= 'a' && c <= 'z') cnta[c - 'a']++;
if (c >= '0' && c <= '9') cnt[c - '0']++;
}
}
大小写转换¶
输入一个字符串,全部转换为小写字母
for (int i = 0, len = s.size(); i < len; i++)
if (s[i] >= 'A' && s[i] <= 'Z') s[i] += 32;
cout << s;
统计字符串¶
前文对字符进行了统计,可以用字符进行存储,原理是用字符 ASCII 码相对距离作为数组的下标,存储起来。
对于字符串,那怎么表示呢?
在这里,我们需要使用到标准模板库 STL 当中的 map。
int main() {
int n;
string s;
map<string, int> mp;
while (n--) {
cin >> s;
mp[s]++:
}
for (auto i : mp) cout << i.first << ' ' << i.second << endl; // 输出每个字符串出现了几次
return 0;
}
读入一整行¶
使用
getline()。
cin 读入到空格、换行、EOF(文件终止符) 的时候,会终止读入。
如果我们想把一整行,把空格字符当成字符串的一部分读入,使用 getline()。
getline()会读入一整行,但当我们不需要读入空格时候,我们正常使用 cin。
注意,不要滥用 getline()。
过滤空格
我们通过 getline() 读入一整行,把其中的空格过滤掉。
抠单词操作,重点¶
1143:最长最短单词,题意是输入一个包含空格的句子,找出最长的单词和最短的单词。
因为输入包含空格,我们需要使用 getline 读入
读入进来之后,把一个个单词抠出来,打擂台
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin, s);
int maxn = -1, minn = 110;
string maxt, mint;
for (int i = 0, len = s.size(); i < len; i++) {
if (s[i] == ' ' || s[i] == ',') continue;
string t;
int j = i;
while (j < len && s[j] != ' ' && s[j] != ',') t += s[j++];
if (j - i > maxn) maxn = j - i, maxt = t;
if (j - i < minn) minn = j - i, mint = t;
i = j; // 没这句话,是会出大问题的。这里自行尝试删除一下,试试
}
cout << maxt << endl << mint << endl;
return 0;
}