文档介绍:华为机试题及答案
1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
测试:输入:“abc def gh i d” 输出:“abc,def,gh,i,d,”
#include<>
#include<>
void DivideString(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';
}
int main()
{
char test[40];
char re[40];
gets(test);
DivideString(test, strlen(test), re);
printf("%s",re);
return 0;
}
2、将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换
2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
测试:输入:char*input="abbbcd" 输出:char*output="bcdcde"
#include<>
#include<>
void convert(char *input,char* output)
{
int i;
for(i=0;i<strlen(input);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<>
#include<>
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
int i,j,count;
int k=0;
for(i=0;i<strlen(pInputStr);i++)
{
count=0;
for(j=0;j<strlen(pOutputStr);j++)
{
if(pInputStr[i]==pOutput