华为机试及个人答案Word文档下载推荐.docx
《华为机试及个人答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华为机试及个人答案Word文档下载推荐.docx(9页珍藏版)》请在冰点文库上搜索。
输出:
“def”
“afafafaf”
“af”
“pppppppp”
“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。
一定要保证编译运行不受影响。
我的答案:
#include<
stdio.h>
string.h>
stdlib.h>
#defineMAXSIZE256
intmain(void)
{
char*In_str=(char*)malloc(MAXSIZE);
char*Out_str=(char*)malloc(MAXSIZE);
printf("
pleaseinputstring:
\n"
);
scanf("
%s"
In_str);
stringFilter(In_str,strlen(In_str),Out_str);
%s\n"
Out_str);
return0;
}
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr)
intj=0;
boolch[26]={0};
for(inti=0;
i<
lInputLen;
i++)
{
if(false==ch[pInputStr[i]-'
a'
])
{
ch[pInputStr[i]-'
]=true;
pOutputStr[j++]=pInputStr[i];
}
pOutputStr[j]='
\0'
;
}
二、题目描述(40分):
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。
比如字符串"
abcbc"
由于无连续重复字符,压缩后的字符串还是"
。
2、压缩字段的格式为"
字符重复的次数+字符"
例如:
字符串"
xxxyyyyyyz"
压缩后就成为"
3x6yz"
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr);
输入字符串长度
“cccddecc”
“3c2de2c”
“adef”
“adef”
“pppppppp”输出:
“8p”
charIn_str[MAXSIZE];
charOut_str[MAXSIZE];
pleaseinputastring\n"
stringZip(In_str,strlen(In_str),Out_str);
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr)
inti,j,k=0;
intnum;
charbuffer[20];
for(i=0;
)
{
num=0;
for(j=i+1;
j<
j++)//找重复的
//if(pInputStr[i]==pInputStr[j])
if(pInputStr[i]==pInputStr[j])
num++;
else
break;
if(num)
memset(buffer,0,sizeof(buffer));
itoa(num+1,buffer,10);
//10进制转换字符串
strcpy(pOutputStr+k,buffer);
//可能为3位也可能4位等
k+=strlen(buffer);
pOutputStr[k++]=pInputStr[i];
i=i+num+1;
pOutputStr[k]='
三、题目描述(50分):
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:
“操作数1运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr);
lInputLen:
“4+7”
“11”
“4-7”
“-3”
“9++7”
“0”注:
格式错误
charIn_str[MAXSIZE]="
1++3"
//printf("
//scanf("
arithmetic(In_str,strlen(In_str),Out_str);
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr)
inti,j,num1=0,num2=0,num_space,resule;
booladd=false,sub=false;
charbuffer[MAXSIZE];
for(i=0,num_space=0;
if(pInputStr[i]=='
'
num_space++;
if(2!
=num_space)//空格数错
pOutputStr[0]='
0'
pOutputStr[1]='
//return;
pInputStr[i]!
='
if(pInputStr[i]>
'
&
pInputStr[i]<
9'
num1=num1*10+pInputStr[i]-'
else//有非法字符
pOutputStr[0]='
pOutputStr[1]='
return;
for(j=i+1;
pInputStr[j]!
j++);
if(1!
=j-i-1)//运算符号数量非法
{
}
if('
+'
!
=pInputStr[i+1]&
-'
=pInputStr[i+1])//运算符号非法
{
pOutputStr[0]='
pOutputStr[1]='
//return;
}
else
if('
==pInputStr[i+1])
add=true;
sub=true;
for(i=j+1;
{
if(pInputStr[i]>
num2=num2*10+pInputStr[i]-'
else//有非法字符
{
pOutputStr[0]='
pOutputStr[1]='
//return;
}
}
if(add)
resule=num1+num2;
elseif(sub)
resule=num1-num2;
memset(buffer,0,sizeof(buffer));
itoa(resule,buffer,10);
strcpy(pOutputStr,buffer);