2013-7-28年华为校招机考参考代码

本文提供了2014年华为校招机考的三道字符串处理题目及解题代码。题目包括:1. 字符串滤波,去除重复小写字母;2. 字符串压缩,连续重复字符用数字表示;3. 字符串算术,处理加减法表达式并输出结果。代码已修复第三题可能出现的bug。
摘要由CSDN通过智能技术生成
/*
2014年华为校招机考参考代码:7-28号那一批,时间为一个小时。
题目:1.字符串滤波; 将字符串中由小写字母,将后面重复的出现的字母去掉。
题目:2.字符串压缩; aabbccd => 2a2b2cd
题目:3.字符串+- 算术;比如“7 + 9”,输出结果字符串,要是非法则输出字符串0
在机考时候(第三题有点bug,可能有些case过不去) ,在此给出修复bug版 
@author ,2013-8-27,9:00
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void <strong>fliter</strong>(char *pInput,int len, char *pOut)
{
int i,k=0;
int hash_char[26];
int temp_index;
memset(hash_char,0,sizeof(hash_char));
for (i=0;i<len;i++)
{
temp_index = pInput[i] - 'a';
if(!hash_char[temp_index])
{
pOut[k++] = pInput[i];
hash_char[temp_index] = 1;
}
}
pOut[k]=0; //加上串结束符
}


void <strong>zip_char</strong>(char *pInput,int len,char *pOut)
{
char temp;
int i,j,k=0;
int local_num,t;
char num[256];
for(i =0;i<len;i++)
{
temp = pInput[i];
local_num =1;
for(j=i+1;j<len;j++)
{
if(temp == pInput[j])
local_num++;
else
break;
}
i = i + local_num -1;
if(local_num ==1)
pOut[k++] = pInput[i];
else
{
itoa(local_num,num,10);
for(t=0;num[t]!=0;t++)
pOut[k++] = num[t];
pOut[k++]=temp;
}
}
pOut[k] =0;
}
void <strong>cal_char</strong>(char *pInput,int len,char *pOut)
{
int sum=0,i,j,m,k;
int negative_num=0;
int positvie_num=0;
int word_num;
int a,b,c;
int extract;
for(i =0;i<len;i++)
{
if(!(pInput[i]>='0' && pInput[i]<='9')&& pInput[i]!=' ' && pInput[i]!='+' && pInput[i]!='-')//要是有其他非法字符,直接返回
{
pOut[0]='0';
pOut[1]=0;
return;
}
if(pInput[i]=='+') //去除首干扰
positvie_num++;
if(pInput[i]=='-')
negative_num++;
}
if(pInput[0]=='-')
negative_num--;
if(pInput[0]=='+')
positvie_num--;
i=0;
if(positvie_num ==1 || negative_num==1)
{
word_num=0;
for(;i<len;i++)
{
if (pInput[i]!=' ')
{
for(i=i+1;i<len;i++)
if(pInput[i]==' ')
{
word_num++;
break;
}
if(i ==len)//最后一个词可能没有空格
word_num++;
}
}
if(word_num <=3)
{
extract = sscanf(pInput,"%d + %d %d",&a,&b,&c);
if(extract==2)
{
positvie_num==1? (itoa(a+b,pOut,10)): (itoa(a-b,pOut,10));
return;
}
else
{
pOut[0]='0';
pOut[1]=0;
return;
}
}
else
{
pOut[0]='0';
pOut[1]=0;
return;
}
}
else
{
pOut[0]='0';
pOut[1]=0;
return;
}
}
int main()
{
//test code
char s1[]="abavcc";
char s2[20];
fliter(s1,strlen(s1),s2);
printf("%s convert %s\n",s1,s2);


char s11[]="abaaaavccccc";
char s22[20];
zip_char(s11,strlen(s11),s22);
printf("%s convert %s\n",s11,s22);


char s111[]=" -3 +9";  //"3 7 +9"
char s222[20];
cal_char(s111,strlen(s111),s222);
printf("%s convert %s\n",s111,s222);


system("pause"); //暂停下方便看结果,机考提交代码要注释掉这行
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值