#include<iostream> using namespace std; #include<cmath> #include<iomanip> //虚函数 /*class ClassA { public: ClassA() { cout<<"A类构造函数被调用"<<endl; } ~ClassA() { cout<<"A类析构函数被调用"<<endl; } virtual void getnum()=0; //{ // cout<<"A类虚函数被调用"<<endl; //} private: int num; char *str; double dnum; }; class ClassB:public ClassA { public: ClassB() { cout<<"B类构造函数被调用"<<endl; } ~ClassB() { cout<<"B类析构函数被调用"<<endl; } virtual void getnum() { cout<<"B类虚函数被调用"<<endl; } private: char Bstr[10]; }; void main() { ClassA *pc; ClassB B; pc=&B; pc->getnum(); getchar(); }*/ /* 上一程序的缩略版 class ClassA { public: virtual void getnum() { cout<<"A类虚函数被调用"<<endl; } }; class ClassB:public ClassA { public: virtual void getnum() { cout<<"B类虚函数被调用"<<endl; } }; void main() { ClassA *pc; ClassB B; pc=&B; pc->getnum(); getchar(); }*/ /* 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符, 将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 */ void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) { //const char *TempStr=pInputStr; int count1=0; int count2=0; int i=0; while(count1<=lInputLen) { for(i=0;i<=count2;) { if(*(pInputStr+count1)!=*(pOutputStr+i))//判断是否有重复字符 i++; else break; } if(i>count2) { *(pOutputStr+count2)=*(pInputStr+count1); count2++; } count1++; } } /*通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩, 并输出压缩后的字符串。 压缩规则: 1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"*/ void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) { int i=0; int j=0; int k=0; for(i=0;i<lInputLen;i=j) { for(j=i+1;j<lInputLen;j++) if(*(pInputStr+j)!=*(pInputStr+i)) break; if(j!=i+1) *(pOutputStr+k++)=char(j-i+'0'); *(pOutputStr+k++)=*(pInputStr+i); } } /* 题目描述(50分): 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的情况。 2. 若输入算式格式错误,输出结果为“0”。 要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:“4 + 7” 输出:“11” 输入:“4 - 7” 输出:“-3” 输入:“9 ++ 7” 输出:“0” 注:格式错误 */ bool Isnumber(char c) { if(c<='9'&&c>='0'){ return true; }else{ return false; } } void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) { int ops1=0; int ops2=0; int num=0; char Coptr; int i=0; int j=0; int isvailed=0; while(Isnumber(pInputStr[i])) { ops1=ops1*10+(int)(pInputStr[i]-'0'); i++; } //cout<<ops1<<endl; if(i==0) isvailed=1; while(pInputStr[i++]==' '); //cout<<i<<endl; j=i-1; Coptr=pInputStr[j];//获取操作符 //cout<<Coptr<<endl; while(pInputStr[j++]==' '); j=i+1; while(Isnumber(pInputStr[j])) { ops2=ops2*10+(int)(pInputStr[j]-'0'); j++; } if(j==(i+1)) isvailed=1; if(isvailed==1) *pOutputStr='0'; else { switch(Coptr) { case '+': num=ops1+ops2; break; case '-': num=ops1-ops2; break; case '*': num=ops1*ops2; break; case '/': num=ops1/ops2; break; default: *pOutputStr='0'; break; } } if(num==0) *pOutputStr='0'; int scale=100; if(num<0) { *pOutputStr++='-'; num=-num; } for(int k=0;k<3;k++) { if(num/scale) { *pOutputStr++=char(num/scale+'0'); } num=num%scale; if(num==0) { *pOutputStr++=char('0'); break; } scale/=10; } } /*1 字串转换 问题描述: 将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a; 若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab; 当连续相同字母超过两个时,第三个出现的字母按第一次出现算。 要求实现函数: void convert(char *input,char* output) 【输入】 char *input , 输入的字符串 【输出】 char *output ,输出的字符串 【返回】 无 示例 输入:char*input="abcd" 输出:char*output="bcde" 输入:char*input="abbbcd" 输出:char*output="bcdcde" 3*/ void convert(char *input,char* output) { int i=0; int j=0; int k=0; int temp=1; while(input[j++]!='