2024/5/4 C++五一

本文介绍了如何使用C++编写一个程序,通过NumberCollector和LetterCollector类,分别收集输入字符串中的数字和字母,并使用冒泡排序算法对它们进行排序,最后输出结果。
摘要由CSDN通过智能技术生成

请c++编写一个程序,该程序包含两个类,分别存放输入的字符串中的数字和字母,并按各自的顺序排列,类中实现一个dump函数,调用后输出类中当前存放的字符串结果

#include <iostream>  
#include <string>  
using namespace std;
// 简单的冒泡排序函数  
void bubbleSort(string& str) {  
    int n = str.length();  
    for (int i = 0; i < n - 1; i++) {  
        for (int j = 0; j < n - i - 1; j++) {  
            if (str[j] > str[j + 1]) {  
                // 交换 str[j] 和 str[j + 1]  
                    swap(str[j], str[j + 1]);  
            }  
        }  
    }  
}  
  
// 检查字符是否为数字  
bool isDigit(char c) {  
    return c >= '0' && c <= '9';  
}  
  
// 检查字符是否为字母  
bool isLetter(char c) {  
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');  
}  
  
class Collector {  
public:  
    virtual void addChar(char c) = 0;  
    virtual void dump() const = 0;  
};  
  
class NumberCollector : public Collector {  
private:  
    string numbers;  
public:  
    void addChar(char c) override {  
        if (isDigit(c)) {  
            numbers += c;  
        }  
    }  
  
    void sortAndDump() {  
        bubbleSort(numbers);  
        dump();  
    }  
  
    void dump() const override {  
        cout << "Numbers: " << numbers << endl;  
    }  
};  
  
class LetterCollector : public Collector {  
private:  
    string letters;  
public:  
    void addChar(char c) override {  
        if (isLetter(c)) {  
            letters +=tolower(c); // 转换为小写  
        }  
    }  
  
    void sortAndDump() {  
        bubbleSort(letters);  
        dump();  
    }  
  
    void dump() const override {  
        cout << "Letters: " << letters << endl;  
    }  
};  
  
int main() {  
    string input;  
    cout << "Enter a string: ";  
    getline(cin, input);  
  
    NumberCollector numberCollector;  
    LetterCollector letterCollector;  
  
    for (char c : input) {  
        numberCollector.addChar(c);  
        letterCollector.addChar(c);  
    }  
  
    numberCollector.sortAndDump();  
    letterCollector.sortAndDump();  
  
    return 0;  
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值