2014年 华为机试题(一)(二)(三)
来源:互联网 发布:点云稀释软件 编辑:程序博客网 时间:2024/05/21 06:46
/**********************************
<p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。</span></p><p>要求实现函数:<span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;</span></p>
**********************************/
#include<iostream>using namespace std;void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr){try{if(lInputLen<=0)throw 0; int i=1,count=0; pOutputStr[count]=pInputStr[0];int k=0;bool flag=false; while(i<lInputLen){flag=false;for(k=0;k<=count;k++){if(pOutputStr[k]==pInputStr[i]){flag=true;break;}}if(!flag){count++;pOutputStr[count]=pInputStr[i];}else flag=false;i++;}count++;pOutputStr[count]='\0';}catch(int e){if(e==0){cout<<"正确的字符串的长度大于0!"<<endl;}exit(0);}}int main(){//char *pInputStr="aaaaaaaaaa"; char *pInputStr="afafafafa";char *pOutputStr;int lInputLen=strlen(pInputStr);pOutputStr=new char[lInputLen+1];stringFilter(pInputStr,lInputLen,pOutputStr);cout<<pInputStr<<endl;cout<<pOutputStr<<endl;if(pOutputStr!=NULL)delete []pOutputStr;return 0;}
/**********************************
<p><span style="font-size: 14px; font-family: Verdana;"></span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">要求实现函数: void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;</span></p><p><span style="font-size: 14px; font-family: Verdana;"></span></p>
**********************************/
#include<iostream>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){try{if(lInputLen<=0)throw 0; int i=1,count=0; pOutputStr[count]=pInputStr[0];int k=1;//情况1:只有一个字符组成的字符串;if(1==lInputLen){ char ch=pOutputStr[count]; pOutputStr[count]=1+'0'; pOutputStr[count+1]=ch; count+=1;} while(i<lInputLen){if(pOutputStr[count]==pInputStr[i]){k++;}else{//情况2:有多个连续字符组成的情况;if(k>1){char ch=pOutputStr[count]; pOutputStr[count]=k+'0';pOutputStr[count+1]=ch;pOutputStr[count+2]=pInputStr[i];count+=2;}else{ pOutputStr[count+1]=pInputStr[i];count+=1;}k=1;}//情况3:全部是一样的字符组成的字符串或者最后是以多个连续相同字符结尾组成的字符串;if(i==lInputLen-1){if(k>1){char ch=pOutputStr[count]; pOutputStr[count]=k+'0';pOutputStr[count+1]=ch;count+=1;}}i++;}count++;pOutputStr[count]='\0';}catch(int e){if(e==0){cout<<"正确的字符串的长度大于0!"<<endl;}exit(0);}}int main(){//char *pInputStr="a"; //char *pInputStr="afafafafa"; //char *pInputStr="afafaaaaa"; char *pInputStr="cccddecc";char *pOutputStr;int lInputLen=strlen(pInputStr);pOutputStr=new char[lInputLen*2+1];stringZip(pInputStr,lInputLen,pOutputStr);cout<<pInputStr<<endl;cout<<pOutputStr<<endl;if(pOutputStr!=NULL)delete []pOutputStr;return 0;}
/**********************************
<p></p><p><span style="font-size: 14px; font-family: Verdana;"></span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;</span><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> </span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出</span></p><p><span style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">示例 输入:“4 + 7” 输出:“11”输入:“4 - 7” 输出:“-3”输入:“9 ++ 7” 输出:“0” 注:格式错误</span></p><p><span style="font-size: 14px; font-family: Verdana;"></span></p><p></p>
**********************************/
#include<iostream>#include<math.h>using namespace std;void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr){int i=0;int value=0;int num_value=0;int flag=-1;//-1开始,0加号,1减号;bool flag_exit=false; while(i<lInputLen){switch(pInputStr[i]){case '+':{if(num_value==0){cout<<"输入错误! ";flag_exit=true;}else{int k;int temp=0;for(k=0;k<num_value-1;k++){int m_value=pInputStr[i-num_value+k]-'0';temp=(temp+m_value)*10;}temp+=pInputStr[i-1]-'0';if(flag==-1 || flag==0) value+=temp;if(flag==1)value-=temp;flag=0;num_value=0;}break;}case '-':{if(num_value==0){cout<<"输入错误! ";flag_exit=true;}else{int k=0;int temp=0;for(k=0;k<num_value-1;k++){int m_value=pInputStr[i-num_value+k]-'0';temp=(temp+m_value)*10;}temp+=pInputStr[i-1]-'0';if(flag==-1 || flag==0) value+=temp;if(flag==1)value-=temp;flag=1;num_value=0;}break;}default:{num_value++;break;}}if(flag_exit)break;if(i==lInputLen-1 ){if(num_value>0){int k=0;int temp=0;for(k=0;k<num_value-1;k++){ int m_value=pInputStr[i-1+k]-'0';temp=(temp+m_value)*10;}temp+=pInputStr[i]-'0';if(flag==-1 || flag==0) value+=temp;if(flag==1)value-=temp;}else{cout<<"输入错误! ";flag_exit=true;}}i++;}if(flag_exit){pOutputStr[0]='0';pOutputStr[1]='\0';}else{//将value-》0-9之间的数值; //cout<<value<<endl;int count=0;int j;if(value<0){pOutputStr[count]='-';count++;j=1; value=abs(value); while(value!=0){ pOutputStr[count]=value%10+'0'; value/=10; count++;}for(j=0;j<count/2;j++){char ch=pOutputStr[j+1];pOutputStr[j+1]=pOutputStr[count-1-j];pOutputStr[count-1-j]=ch;}pOutputStr[count]='\0';}else{ while(value!=0){ pOutputStr[count]=value%10+'0'; value/=10; count++;}for(j=0;j<count/2;j++){char ch=pOutputStr[j];pOutputStr[j]=pOutputStr[count-1-j];pOutputStr[count-1-j]=ch;}pOutputStr[count]='\0';}}}int main(){//char *pInputStr="9+-7"; //char *pInputStr="-9+7"; //char *pInputStr="+9+7"; //char *pInputStr="9++7"; //char *pInputStr="9+7+"; char *pInputStr="9-17-8";int lInputLen=strlen(pInputStr);char *pOutputStr=new char[lInputLen+1];cout<<pInputStr<<" = ";arithmetic(pInputStr,lInputLen,pOutputStr);cout<<pOutputStr<<endl;return 0;}
0 0
- 2014年 华为机试题(一)(二)(三)
- 2015年 华为机试题(三)
- 华为机试题(二)
- 华为java机试题整理(二)
- 华为机试题(一) 最高分是多少
- 华为2014校园招聘机试题(一)
- 华为历年机试题型总结系列(三)
- 牛客华为机试题刷题笔记(三)
- 华为历年机试题型总结系列(二)
- 牛客华为机试题刷题笔记(二)
- 华为历年机试题型总结系列(一)
- 华为机试题2016(一) 简单错误记录
- 牛客华为机试题刷题笔记(一)
- 华为机试题(2)
- 华为机试题(3)
- 华为机试题(4)
- 华为机试题(5)
- 华为机试题(6)
- driver 开发常用API笔记
- 网站统计中的数据收集原理及实现
- HDUOJ A+Bproble 题目1089 1090 1091 1092 1093 1094 1095 1096
- Java经典位运算实例
- Rational Rose 2007(v7.0)下载地址、安装及激活详解教程
- 2014年 华为机试题(一)(二)(三)
- VS2008 fstream 编译出错的解决方法
- node msgpack5 数据传输 简单实现
- 关于ISBN号码的一些解法
- hdu5360||多校联合第6场1008 贪心
- 机房收费系统之子窗体不显示问题
- MKNetworkKit介绍及使用
- 二叉查找树的遍历【先序(前序),中序,后序】
- 清华牛人-----王垠