华为机试2014届--字符串过滤、字符串压缩、100以内加减法
2015-07-29 22:42
330 查看
题目一 --------字符串过滤
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。
下面是代码,可能有些小问题,
测试结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/5eafc1588a6a769d56516b2e3faa31c9)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/0c8bdd02349faa864e6894464a130278)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/abebb3c9358ac0e90eba7f17197e291c)
题目二 ------字符串压缩
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
测试结果
三、
通过键盘输入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” 注:格式错误
测试结果
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。
下面是代码,可能有些小问题,
#include <iostream> #include <string> using namespace std; void stringFilter( const char *pInputStr, long lInputLen, char *pOutputStr) { long i,j,flag; char *temp=pOutputStr; *pOutputStr++=*pInputStr; for(i=1;i<lInputLen;i++) { flag=1; for(j=0;j<i;j++) { if(pInputStr[i]==pInputStr[j]) flag=0; } if(flag) *pOutputStr++=pInputStr[i]; } *pOutputStr=NULL; pOutputStr=temp; cout<<pOutputStr<<endl; } int main() { const int Size=10000; char pIn[Size]; cin.getline(pIn,Size); long str=strlen(pIn); //cout<<str<<endl; char *pOu=new char[str+1]; stringFilter(pIn, str, pOu); return 0; }
测试结果
题目二 ------字符串压缩
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
#include <iostream> #include <string> using namespace std; void stringZip( const char *pInputStr, long lInputLen, char *pOutputStr) { int i=0,j,count=1; char *temp=pOutputStr; for(i=0;i<lInputLen;) { for(j=1;j<lInputLen-i;j++) { if(pInputStr[i]!=pInputStr[i+j]) break; count++; } if(count!=1) { itoa(count,pOutputStr,10); pOutputStr=pOutputStr+strlen(pOutputStr); } *pOutputStr++=pInputStr[i]; i=i+j; count=1; } *pOutputStr=NULL; pOutputStr=temp; cout<<pOutputStr<<endl; } int main() { const int Size=1000; long str; char pIn[Size]; cin.getline(pIn,Size); str=strlen(pIn); //cout<<str<<endl; char *pOu=new char[str+1]; stringZip(pIn,str,pOu); return 0; }
测试结果
三、
通过键盘输入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” 注:格式错误
#include <iostream> using namespace std; void arith(const char *pInput,int len,char *pOut) { int i,num1=0,num2=0,flag=0,result=0; char fuhao='!'; for(i=0;i<len;i++) { if(pInput[i]>='0'&&pInput[i]<='9'&&flag==0) num1=num1*10+pInput[i]-'0'; //cout<<num1<<endl; if(pInput[i]==' ') flag=1; if(pInput[i]>='0'&&pInput[i]<='9'&&flag==1) num2=num2*10+pInput[i]-'0'; //cout<<num2<<endl; if(pInput[i-1]==' '&&pInput[i+1]==' ') fuhao=pInput[i]; } switch (fuhao) { case '!': cout<<result<<endl<<"格式错误"<<endl; break; case '+': result=num1+num2; cout<<result<<endl;break; case '-': result=num1-num2; cout<<result<<endl;break; } } int main() { const int Size=20; char pIn[Size]={0}; char pOu[Size]={0}; cin.getline(pIn,Size); int length=strlen(pIn); arith(pIn,length,pOu); return 0; }
测试结果
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解