华为上机笔试题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数voidStringchang(constchar*inpu,char*output)其中input是输入字符串,output是输出字符串#includestdio.h#includeassert.hvoidStringchang(constchar*input,char*output){constchar*p=input;/*if(input==NULL){printf(ERROR);//用这种表示方式可否?return;//用return好不好?}*/assert(input!=NULL);while(*p!='\0'){if((*p='a')&&(*p='y')||(*p='A')&&(*p='Y'))*output=*p+1;elseif(*p=='z'||*p=='Z')*output=*p+1-26;else*output=*p;output++;p++;}*output=0;}voidmain(){chara[11]={abc};//如何模拟空指针的情况charb[11];Stringchang(a,b);printf(%s,b);}2.求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。函数为intsame(intnum)其中num是输入的整型数字#includeiostreamusingnamespacestd;intsame(intnum)//整数值的范围:longint为-2(共10位)到正2开头共10位;unsigned//longint为从0到4的共10位数{chara[11];inti=0,m=0,j=0;while(num){a[i]=num%10+'0';num=num/10;i++;j++;}i=0;intk=j;while(ij){chartemp=a[i];a[i]=a[j-1];a[j-1]=temp;i++;j--;}for(i=0;ik-2;i++)//更标准{for(j=i+1;jk-1;j++)//更妥当当为888时也判断的算是{if(a[i]==a[j]&&a[i+1]==a[j+1])return1;}}return0;}intmain()//是不是用int会好一点?{inta,b;cina;b=same(a);coutbendl;return0;}3.求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来.函数为voidmul(char*input1,intn,char*input2,intm,char*output)其中input1和input2是输入,n是input1的长度,m是input2的长度。Output是输出#includestdio.h#includeassert.h#includeiostreamusingnamespacestd;voidmul(char*input1,intn,char*input2,intm,char*output){longintnum1=0,num2=0,num3=0;//char*p1=input1;char*p2=input2;inti=0,j=0,temp;intsign1=0,sign2=0;assert(input1!=NULL&&input2!=NULL);//以下程序是将input1字符串转换为数字,考虑到了字符串中第一个字符为‘+’或者‘-’号的情况,//同时考虑到了非法输入时的处理情况。if(*input1=='-'){input1++;sign1=1;}if(*input1=='+')input1++;while(*input1!='\0'){assert(*input1='9'&&*input1='0');num1=num1*10+(*input1-'0');input1++;}if(sign1==1)num1=-num1;//以下程序是将input2字符串转换为数字,考虑到了字符串中第一个字符为‘+’或者‘-’号的情况,//同时考虑到了非法输入时的处理情况。if(*input2=='-'){input2++;sign2=1;}if(*input2=='+')input2++;while(*input2!='\0'){assert(*input2='9'&&*input2='0');num2=num2*10+(*input2-'0');input2++;}if(sign2==1)num2=-num2;//将两个数相乘num3=num1*num2;//考虑到结果为负数的情况,将整数转换为字符串,并且将字符串倒序if(num30){output[i]='-';i++;j++;num3=-num3;}while(num3){output[i]=num3%10+'0';i++;num3=num3/10;}output[i]=0;//将字符串倒序i--;while(ji){temp=output[j];output[j]=output[i];output[i]=temp;j++;i--;}}intmain(){chara[10],b[10],c[10];intanum,bnum;cina;cinb;anum=strlen(a);bnum=strlen(b);mul(a,anum,b,bnum,c);coutcendl;return0;}//用纯指针实现程序如下:#includestdio.h#includeassert.hvoidmul(char*input1,intn,char*input2,intm,char*output){intsum1=0,sum2=0,sum=0;inti=0;intsign1,sign2;char*p=input1,*q=input2,*s=output,*r=output;assert(input1!=NULL&&input2!=NULL);if(*p=='+'){p++;sign1=1;}elseif(*p=='-'){p++;sign1=0;}while(*p){assert(*p='9'&&*p='0');sum1=sum1*10+(*p-'0');p++;}if(sign1==0){sum1=-sum1;}//input2dechuliif(*q=='+'){q++;sign2=1;}elseif(*q=='-'){q++;sign2=0;}while(*q){assert(*q='9'&&*q='0');sum2=sum2*10+(*q-'0');q++;}if(sign2==0){sum2=-sum2;}//两数相乘sum=sum1*sum2;//printf(%d,sum);if(sum0){sum=-sum;*s='-';s++;r++;//因为返回的指针开始地址是output,所以这里output不能变,只能是另外用一个指针代替他}while(sum){*s=sum%10+'0';sum=sum/10;s++;}*s=0;s--;//忘记s--了//printf(%s\n,output);while(rs){chartemp=*r;*r=*s;*s=temp;s--;r++;}//printf(%s\n,output);}voidmain(){chara[3]=12;charb[3]=34;charc[11];mul(a,3,b,3,c);printf(%s,c);}两个大数相乘:#includestdio.h#includestring.h#includestdlib.h#defineN100voidGetDigits(int*a,char*s);voidmultiply(int*a,int*b,int*c);main(){chars1[N],s2[N];inti,j,a[N],b[N],c[N*2];printf(\ninputnumbera:);scanf(%s,s1);printf(\ninputnumberb:);scanf(%s,s2);//把输入的字符串,按位存放到数组GetDigits(a,s1);GetDigits(b,s2);multiply(a,b,c);//找到最高位j=N*2-1;while(c[j]==0)j--;//打印计算结果printf(\n%s*%s=,s1,s2);for(i=j;i=0;i--)printf(%d,c[i]);}/*把字符串形式的数字按位存放到数组*/voidGetDigits(int*a,char*s){inti;chardigit;intlen=strlen(s);for(i=0;iN;i++)*(a+i)=0;for(i=0;ilen;i++){digit=*(s+i);*(a+len-1-i)=digit-'0';}}/*把a*b的结果存储到数组c中,按位表示*/voidmultiply(int*a,int*b,int*c){inti,j;//先把结果数组设置为0for(i=0;iN*2;i++)*(c+i)=0;for(i=0;iN;i++)for(j=0;jN;j++){*(c+i+j)+=*(a+i)**(b+j);printf(%d,*(c+i+j));}//处理进位for(i=0;iN*2-1;i++){*(c+i+1)+=*(c+i)/10;//进位累加到高位*(c+i)=*(c+i)%10;//该位的最后结果}}5、删除子串(不会做),只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#includestdio.h#includestdlib.h#includeassert.h#includestring.hintdelete_sub_str(constchar*str,constchar*sub_str,char*result){constchar*p,*q;//注意最刚开始就要加constp=str;q=sub_str;intcount=0;intnum=strlen(sub_str);assert(str!=NULL&&sub_str!=NULL);while(*p!='\0')//没有想法{if(*p==*q){for(inti=1;inum;i++){if(*(p+i)!=*(q+i))break;}if(i==num){count++;p+=num;}}elseif(*p!=*q){*result=*p;p++;//这里自己写错了result++;//这里自己写错了}}*result=0;returncount;}voidmain(){chars[100]={'\0'};intnum=delete_sub_str(123abc12de234fg1hi34j123k,123,s);printf(Thenumberofsub_stris%d\r\n,num);printf(Theresultstringis%s\r\n,s);}//用指针实现#includestdio.h#includeassert.hintdelete_sub_str(constchar*str,constchar*sub_str,char*result){constchar*p,*q;char*r;p=str;q=sub_str;r=result;intnum=0,i=0,k=0;while(*(p+i)){if(*(p+i)==*(q)){for(intj=0;

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功