当前位置:首页C++程序设计 > 正文

C++string类的综合应用

作者:野牛程序员:2023-02-24 15:13:37C++程序设计阅读 2598

下面我们来看一个使用string类的综合应用例程,假设我们要实现一个小型的英语单词处理程序,要求支持以下功能:

  1. 输入一段英文文本。

  2. 统计文本中出现的单词总数。

  3. 统计文本中每个单词出现的次数,并按照字典序排序输出。

这个程序可以通过string类和STL算法轻松实现,具体代码如下

#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
    //输入文本
    string text;
    cout << "请输入英文文本:" << endl;
    getline(cin, text);

    //将文本中的标点符号和数字替换为空格
    transform(text.begin(), text.end(), text.begin(), [](char c) {
        if (ispunct(c) || isdigit(c)) {
            return ' ';
        } else {
            return c;
        }
    });

    //统计单词总数
    int wordCount = 0;
    for (auto it = text.begin(); it != text.end(); ) {
        while (it != text.end() && isspace(*it)) { //跳过空格
            it++;
        }
        if (it != text.end()) { //找到单词的起始位置
            wordCount++;
            while (it != text.end() && !isspace(*it)) { //找到单词的结束位置
                it++;
            }
        }
    }

    //统计每个单词出现的次数
    map<string, int> wordMap;
    for (auto it = text.begin(); it != text.end(); ) {
        while (it != text.end() && isspace(*it)) { //跳过空格
            it++;
        }
        if (it != text.end()) { //找到单词的起始位置
            auto start = it;
            while (it != text.end() && !isspace(*it)) { //找到单词的结束位置
                it++;
            }
            auto end = it;
            string word(start, end); //构造单词字符串
            transform(word.begin(), word.end(), word.begin(), ::tolower); //转换为小写字母
            wordMap[word]++; //单词出现次数加1
        }
    }

    //按照字典序排序输出
    vector<pair<string, int>> wordVec(wordMap.begin(), wordMap.end());
    sort(wordVec.begin(), wordVec.end(), [](const pair<string, int>& p1, const pair<string, int>& p2) {
        return p1.first < p2.first;
    });
    cout << "单词总数:" << wordCount << endl;
    cout << "单词出现次数:" << endl;
    for (const auto& p : wordVec) {
        cout << p.first << ": " << p.second << endl;
    }

    return 0;
}

这个程序首先通过getline函数从标准输入读取一行英文文本,并将文本中的标点符号和数字替换为空格,以便后面统计单词。然后程序分别统计单词总数和每个单词出现的次数,使用map容器保存单词和其出现次数,并将map容器中的数据拷贝到vector容器中,最后按照字典序排序输出。需要注意的是,在统计单词时需要将单词字符串转换为小写字母,以便区分大小写不同但拼写相同的单词。

这个程序中使用了string类、STL算法和STL容器,充分体现了C++语言的强大和灵活。使用string类可以方便地操作字符串,STL算法可以快速实现各种数据处理功能,而STL容器则提供了各种数据结构的实现,方便数据的存储和访问。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击