31.试定义一个类 STR,将一个字符串中的各英文单词逆序处理(已知英文单词之间以非英文字母分隔)。
具体要求如下:
- 私有数据成员
- char *s: 指向待处理的字符串。
- 公有成员函数
- STR (char *t) :构造函数,根据 t 参数初始化数据成员 s。
- void backward (char *t1,char *t2):将指针 t1、 t2 之间的字符前后逆序。
- void fun):按题意利用函数 backward()将字符串 s 中的各英文单词逆序。
- void print():输出数据成员。
- ~STR();析构函数,实现必要的功能
- 在主函数中对该类进行测试。
输出示例:
原字符串: 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;
}