华为认证 百分网手机站

2016年华为上机考试题(2)

时间:2017-11-23 华为认证 我要投稿

  顺便复习一下java异常的知识。

  异常定义:能让程序意外中断运行的指令流。

  java异常类的结构如下

  Throwable包括了一切的异常。ERROR是JVM的异常,不可以用我们的代码处理。Exception是我们程序中可能出现的异常,可以处理。

  RuntimeException和Exception的关系:

  RuntimeException继承自Exception,RuntimeException和它的子类可以不用try catch进行处理。

  Java代码 收藏代码

  ry{

  y = Integer.parseInt(year);

  }catch(Exception ex){

  System.out.println("ERROR");

  return;

  }

  其实这里 Integer.parseInt(year) 可能会抛出NumberFormatException的,但是eclipse并没有提示这句代码需要处理异常,因为NumberFormatException是RuntimeException的子类。

  当然因为RuntimeException是Exception的子类,所以,也可以用try catch来处理。

  3.之前投了华为的实习生,昨天让去参加“华为编程大赛”机试。就一个题,在网吧上机,时间30分钟,题目如下:

  17进制转成10进制,输入是数字跟大写字母。例如输入G、11、FF,分别输出16、18、270

  参考代码如下:

  void main()

  {

  string str;

  cin>>str;

  int i=0;

  int num=0;//保存转换后数字

  int factor=1;

  bool sign=1;//用来标志输入字符串是否非法

  int len=str.size();

  for (i=0;i

  {

  if (str[i]>='0' && str[i]<='9')

  {

  num=num*factor+(str[i]-'0');

  factor*=17;

  }

  else if (str[i]>='A' && str[i]<='G')

  {

  num=num*factor+(str[i]-'A'+10);

  factor*=17;

  }

  else

  {

  sign=0;

  break;

  }

  }

  if (sign)

  cout<

  else

  cout<<"Error Input!"<

  }

  4.一:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔,请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’,并将子串存储。

  如果输入”abc def ghi d”,结果将是abc,def,gh,i,d

  要求实现函数

  Void DivideString(const char *pInputStr,long IinputLen,char *pOutputStr);

  输入:pInputStr:输入字符串

  IinputLen:输入字符串的长度

  输出:pOutputStr:输出字符串,字符串已开辟好,与输入字符串等长

  注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出

  解,首先去掉字符串前面开始的空格,然后遍历字符串,遇到空格时,将标志设为真,先不处理,等下次时循环时,若标志为真,则在字符前加一,号即可

  oid DivideString(const char *pInputStr,long IinputLen, char *OutputStr)

  {

  int cnt=0,i=0;//计数

  bool flag=false;

  while(pInputStr[i]==' ')//去掉前面的空格

  i++;

  for(;i

  {

  if(pInputStr[i]==' ')

  {

  flag=true;

  continue;

  }

  if(flag)//如果flag为true,说明有空格,则将空格变成了,

  {

  flag=!flag;

  OutputStr[cnt++]=',';

  }

  OutputStr[cnt++]=pInputStr[i];

  }

  OutputStr[cnt]='\0';

  }

  二:将一个字符串中出现次数最少的字符删掉,并保证删除后的字符顺序不变,如果出现次数最少的字符有多种,则这几种字符都要删除,该字符串长度不会超过20个字符。 例如:源字符串为“abcdd”,删除后为“dd”

  解:此题主要是内存移位操作

  char *deleteMin(char *InputSrc,int ILen)

  {

  int sz[26]={0};

  int min=20,i;//最小出现次数

  for(i=0;i

  ++sz[InputSrc[i]-'a'];

  for(i=0;i<26;i++)

  if(sz[i]

  min=sz[i];

  for(int t=0;*(InputSrc+t);++t)

  if(sz[InputSrc[t]-'a']==min)

  {

  memcpy(InputSrc+t,InputSrc+t+1,ILen-t);

  --t;//因为跳过了一位

  }

  return InputSrc;

  }


华为相关文章: