华为历年机试题型总结系列(四)

时间:2020-11-27 18:49:17

10.输入m个字符串和一个整数n,把字符串M化成以N为单位的段,不足位数用0补齐

输入:123456789, n=8 输出:12345678 90000000, 输入:123,n=8 输出:12300000

#include<stdio.h>
#include<string.h>

void NumberDivide(char *pInputStr, int StrLength, int N, char *pOutputStr)
{
int i,j=0,section_number,string_left_number,k;

if(StrLength<N) //如果输入字符串长度不足N
{
for(i=0;i<N;++i)
{
if(i>=StrLength) //不足的位数补0
pOutputStr[j++]='0';
else
pOutputStr[j++]=pInputStr[i];
}
}else //输入字符长度大于分段N
{
section_number=StrLength/N; //可整段输出的段数
string_left_number=StrLength-N*section_number; //整段输出后剩余的字符数

for(i=0;i<section_number;++i) //输出完整的section_number段长度为N的字符
{
for(k=0;k<N;++k)
pOutputStr[j++]=pInputStr[i*N+k]; //将输入字符串N段输出
pOutputStr[j++]=' '; //N段字符之间用空格隔开
}

for(i=section_number*N;i<section_number*N+N;++i) //输出剩余字符串,不足补0
{
if(i>=section_number*N+string_left_number)
pOutputStr[j++]='0';
else
pOutputStr[j++]=pInputStr[i];
}
}

pOutputStr[j]='\0';
}

int main(void)
{
char pInputStr[20],pOutputStr[20];
int StrLength,n;

printf("Input the number sequences:\n");
gets(pInputStr);
StrLength=strlen(pInputStr);

printf("Input the n:\n");
scanf("%d",&n);

NumberDivide(pInputStr,StrLength,n,pOutputStr);

puts(pOutputStr);

return 0;
}

11. 电话号码

输入:OneTwoThree 输出:123 ,输入:OneTwoDoubleTwo 输出:1222。有空格,非法字符,两个Double相连,Double位于最后一个单词都错误

#include<stdio.h>
#include<string.h>

int NumberTrans(char *pInputStr, int StrLength, char *pOutputStr)
{
int i,j=0,k=0;
char pOutputStr_Reverse[20]; //逆向存放输出数组

for(i=StrLength;i>=0;--i) //逆向输出是为了解决Double问题
{
switch (pInputStr[i])
{
case 'O':pOutputStr_Reverse[j++]='1';break;
case 'T':pOutputStr_Reverse[j++]=(pInputStr[i+1]=='w')?'2':'3';break;
case 'F':pOutputStr[j++]=(pInputStr[i+1]=='o')?'4':'5';break;
case 'S':pOutputStr_Reverse[j++]=(pInputStr[i+1]=='i')?'6':'7';break;
case 'E':pOutputStr_Reverse[j++]='8';break;
case 'N':pOutputStr_Reverse[j++]='9';break;
case 'D':
if(j==0 || pInputStr[i+6]=='D') //如果Double在最后或者连续两个Double,则返回1
return 1;
else
pOutputStr_Reverse[j++]=pOutputStr_Reverse[j-1]; //连续两个输出一样
break;

case '0':return 1;break;
case '1':return 1;break;
case '2':return 1;break;
case '3':return 1;break;
case '4':return 1;break;
case '5':return 1;break;
case '6':return 1;break;
case '7':return 1;break;
case '8':return 1;break;
case '9':return 1;break;

default:break;
}
}

pOutputStr_Reverse[j]='\0';
for(i=j-1;i>=0;--i)
pOutputStr[k++]=pOutputStr_Reverse[i]; //正向输出结果

pOutputStr[k]='\0';
}

int main(void)
{
char pInputStr[20],pOutputStr[20];
int StrLength,flag=0;

printf("Input the numbers:\n");
gets(pInputStr);
StrLength=strlen(pInputStr);

flag=NumberTrans(pInputStr,StrLength,pOutputStr); //flag用于判断是否输入字符合法

if(flag==1) //非法返回值
puts("ERROR");
else
puts(pOutputStr);

return 0;
}