C++面向对象编程题 第31题

31.试定义一个类 STR,将一个字符串中的各英文单词逆序处理(已知英文单词之间以非英文字母分隔)。
具体要求如下:

  1. 私有数据成员
  • char *s: 指向待处理的字符串。
  1. 公有成员函数
  • STR (char *t) :构造函数,根据 t 参数初始化数据成员 s。
  • void backward (char *t1,char *t2):将指针 t1、 t2 之间的字符前后逆序。
  • void fun):按题意利用函数 backward()将字符串 s 中的各英文单词逆序。
  • void print():输出数据成员。
  • ~STR();析构函数,实现必要的功能
  1. 在主函数中对该类进行测试。
    输出示例:
    原字符串: I ma a tneduts!
    处理后的字符串: I am s student!
#include <iostream>
#include <cstring>
using namespace std;
class Str
{
    char *s;
public:
    Str(const char *t){
        s = new char[strlen(t)+1];
        strcpy(s,t);
    }
    /*
    void backward(char *t1, char *t2)
    {
        t2--;
        while (t1 <= t2)
        {
            char t = *t1;
            *t1 = *t2;
            *t2 = t;
            t1++;
            t2--;
        }
    }
    void fun()
    {
        char *p = s, *q = s;
        while (*p)
        {
            while (*q >= 'a' && *q <= 'z' || *q >= 'A' && *q <= 'Z'){
                q++;
            }
            backward(p, q);
            p = ++q;
        }
    }
    */
    //11.27
     void backward(char *t1,char *t2){
        while(t1<t2){
            char t=*t1;
            *t1++=*t2;
            *t2--=t;
        }
    }
    int Alph(char c){
        if(c>='A'&&c<='Z'||c>='a'&&c<='z')return 1;
        else return 0;
    }
    void fun(){
        char *p=s,*p2;
        while(*p){
            p2=p;
            while(Alph(*p2)){
                p2++;
            }
            backward(p,p2-1);
            p=p2+1;
        }
    }
    void print(){
        cout<<s<<endl;
    }
    ~Str(){
        if(s)delete[]s;
    }
};
int main()
{
    Str str("I am a good student!");
    str.print();
    str.fun();
    str.print();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值