华为机试题及答案
- 格式:doc
- 大小:35.00 KB
- 文档页数:10
华为机试题及答案
1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
测试:输入:“abcdefgh i d”ﻩ输出:“abc,def,gh,i,d,”
#include #include<string、h> voidDivideString(const char *pInputStr,long lInputLen, char *pOutputStr) { ﻩint i=0,j=0; int flag=0; ﻩwhile(pInputStr[i]=='') { ﻩi++; ﻩ} ﻩfor(;i<lInputLen;i++) ﻩ{ ﻩﻩif(pInputStr[i]=='') ﻩ{ flag=1; ﻩcontinue;ﻩﻩ } if(flag==1) ﻩ{ ﻩflag=0; ﻩﻩpOutputStr[j++]=','; } ﻩﻩpOutputStr[j++]=pInputStr[i]; ﻩ} pOutputStr[j++]=','; pOutputStr[j]='\0';ﻩ } intmain() { ﻩchartest[40]; charre[40]; ﻩgets(test); DivideString(test,strlen(test),re); ﻩprintf("%s",re); return0; } 2、将输入得字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后 输出:a->b,b->c,…,y->z,z->a;若输入得字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa转换为bc,zz转换为ab;当连续相同字母超过两个时,第三个出现得字母按第一次出现算。 测试:输入:char*input="abbbcd" 输出:char*output="bcdcde" #include #include<string、h> void convert(char*input,char*output) { int i; ﻩfor(i=0;i { ﻩif(i==0) ﻩ{ ﻩoutput[i]=input[i]+1; ﻩﻩif(output[i]==123) ﻩﻩﻩﻩ{ ﻩﻩﻩﻩoutput[i]=97; ﻩ} ﻩ} ﻩelse ﻩ{ ﻩﻩif(input[i]!=input[i-1]) ﻩﻩ{ ﻩﻩﻩﻩoutput[i]=input[i]+1; ﻩﻩﻩif(output[i]==123) ﻩ{ ﻩoutput[i]=97; ﻩﻩ} ﻩﻩ} ﻩelse ﻩ{ ﻩﻩoutput[i]=input[i]+2; ﻩﻩif(output[i]==123) ﻩﻩﻩ{ ﻩﻩﻩoutput[i]=97; ﻩﻩﻩ} ﻩif(output[i]==124) ﻩ{ ﻩﻩoutput[i]=98; ﻩﻩ} } ﻩﻩ} ﻩ} ﻩoutput[i+1]='\0'; } int main() { ﻩchar in[20]={"asdfzzxzxz"}; ﻩchar on[20]; ﻩ//gets(in); ﻩconvert(in,on); printf("%s",on); ﻩreturn 0; } 3、通过键盘输入一串小写字母(a~z)组成得字符串。请编写一个字符串过滤程序,若字符串中出现多个相同得字符,将非首次出现得字符过滤掉。 测试:输入:“afafafaf” 输出:“af” #include<stdio、h> #include<string、h> void stringFilter(const char *pInputStr, long lInputLen, char*pOutputStr) { inti,j,count; ﻩint k=0; ﻩfor(i=0;i ﻩ{ ﻩﻩcount=0; for(j=0;j { ﻩﻩif(pInputStr[i]==pOutputStr[j]) { ﻩcount++; ﻩﻩ} ﻩ} ﻩif(count==0) ﻩﻩ{ ﻩpOutputStr[k++]=pInputStr[i]; ﻩﻩ}ﻩ } pOutputStr[k]='\0'; } int main() { ﻩchar in[20]={"aabbccabacddsads"}; char on[20]; ﻩ//gets(in); stringFilter(in,strlen(in),on); ﻩprintf("%s",on);