跳转至

字符串的应用

统计字符

一个由大小写字母、数字组成的字符串,

统计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;
// 也可以这样写
// 注意看,是 &c
for (auto &c : s) 
    if (c >= 'A' && c <= 'Z') c += 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()

string s;
getline(cin, s);

getline()会读入一整行,但当我们不需要读入空格时候,我们正常使用 cin

注意,不要滥用 getline()

过滤空格

我们通过 getline() 读入一整行,把其中的空格过滤掉。

string s;
getline(cin, s);

for (auto c : s)
    if (c != ' ') cout << c;
// 把过滤之后的字符,存起来
string s, s2;
getline(cin, s);

for (auto c : s)
    if (c != ' ') s2 += c;

cout << s2;

抠单词操作,重点

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;
}
    // 其中,while 循环部分,是最经典、最关键的代码
    // 初期学习编程,对这种代码表达,会感到陌生,要多加练习
    string t;
    int j = i;
    while (j < len && s[j] != ' ' && s[j] != ',') t += s[j++];