首页 华为机试

华为机试

举报
开通vip

华为机试 华为机试题(附:C++代码) 来源: 徐弘光的日志 编程题(共2题,第一题40分,第二题60分,共100分。请上机编写程序,按题目要求提交文件。[详见考试说明] 本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。   1. 删除字符串中所有给定的子串(40分) 问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。 要求实现函数: int delete_sub_str(const char *str,...

华为机试
华为机试题(附:C++代码) 来源: 徐弘光的日志 编程题(共2题,第一题40分,第二题60分,共100分。请上机编写程序,按题目要求提交文件。[详见考试说明] 本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。   1. 删除字符串中所有给定的子串(40分) 问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。 要求实现函数: int delete_sub_str(const char *str, const char *sub_str, char *result_str) 【输入】 str:输入的被操作字符串          sub_str:需要查找并删除的特定子字符串 【输出】 result_str:在str字符串中删除所有sub_str子字符串后的结果 【返回】 删除的子字符串的个数 注: I、   子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如: 在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果 匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。 II、  输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。 示例 输入:str = "abcde123abcd123" sub_str = "123" 输出:result_str = "abcdeabcd" 返回:2   输入:str = "abcde123abcd123" sub_str = "1234" 输出:result_str = "abcde123abcd123" 返回:0     2. 高精度整数加法(60分) 问题描述: 在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中, 参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊 的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:   9876543210 + 1234567890 = ? 让字符串 num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。   -9876543210 + (-1234567890) = ? 让字符串 num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。   要求编程实现上述高精度的十进制加法。 要求实现函数: void add (const char *num1, const char *num2, char *result) 【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位'-' num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位'-' 【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。 注: I、   当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置; II、  输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012", "-0012"不会出现; III、       要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。 示例 输入:num1 = "580" num2 = "-50" 输出:result = "530"   输入:num1 = "580" num2 = "-600" 输出:result = "-20"   代码: #include using namespace std; int deletestr(const char*str, const char*sub_str, char *result) {  const char*p = str;  const char*p1 = str;  const char*q = sub_str;  int k=0;  while(*p!='\0')  {   if((*p==*q)&&*q!='\0')   {    p++;    q++;   const char*ptr = p;    if(*p=='\0')      {       *result='\0';       }    }   else if(*q=='\0')     {      q=sub_str;      k++;      p1 = p;      }   else if(*p!='\0'&&*q!='\0')    {          *result++ = *p1;       p1++;       p=p1;       q=sub_str;      }      } if(*q!='\0')     {         p=p1;         while(*p!='\0')         *result++ = *p++;         *result = '\0';        }   } void alg(const char*str1, const char*str2, char *result) {  const char *p = str1;  const char *q = str2;  int m = 0, n = 0;  while(*p!='\0')  {   p++;   m++;   }   while(*q!='\0')  {   q++;   n++;   }  p=p-1;  q=q-1;  if((*str1!='-'&&*str2!='-')||(*str1=='-'&&*str2=='-'))     {      if(*str1=='-')      {       m--;       n--;       }      *result='0';      while(m>0&&n>0)        {         if(((*result+*p+*q)-3*'0')>=10)           {            *result = '0'+((*result+*p+*q)-3*'0')%10;            result++;            *result='1';            p--;            q--;            }          else             {              *result = '0'+((*result+*p+*q)-3*'0');                if((m==n)&&m!=1)               {                result++;                *result='0';                }                else if(m!=n)                {                result++;                *result='0';                }              p--;              q--;              }               m--;              n--;         }      if(m>0)        {         while(m>0)         {          if((*result+*p -2*'0')>=10)              {                *result = '0'+(*result+*p -2*'0')%10;                result++;                *result='1';                }           else           {               *result = '0'+(*result+*p -2*'0');               if(m!=1)              {                result++;                *result='0';                }               }              p--;          m--;            }         }        else if(n>0)        {         while(n>0)         {          if((*result+*q -2*'0')>=10)              {                *result = '0'+(*result+*q -2*'0')%10;                result++;                *result='1';                }           else           {               *result = '0'+(*result+*q -2*'0');                if(n!=1)                {                  result++;                  *result='0';                  }               }                   q--;           n--;          }         }     if(*str1!='-')         {       result++;       *result='\0';       }     else     {      result++;      *result='-';      result++;      *result='\0';         }           } else {    int k1=0;    int k2=0;    const char*p1;    const char*p2;    const char*ptr1;    const char*ptr2;    if(*str1=='-')      {       k1=m-1;       k2=n;       p1=p;       p2=q;       ptr1=str1+1;       ptr2=str2;       }    else if(*str2=='-')     {      k1=n-1;      k2=m;      p1=q;      p2=p;      ptr1=str2+1;      ptr2=str1;      }    int temp=0; //long    const char*temptr; //pointer of long    int temp1=0;    const char*temptr1;    if(k1>k2)    {      temp=k1;      temp1=k2;      temptr=p1;      temptr1=p2;      }    else if(k10)        {         temp=k1;         temp1=k2;         temptr=p1;         temptr1=p2;         }       else        {         temp=k2;         temp1=k1;         temptr=p2;         temptr1=p1;       }      }             *result='0';  while(temp1>0)       {        if(('0'-*result+*temptr-*temptr1)>=0)           {             *result=2*'0'-*result+*temptr-*temptr1;             result++;             *result='0';             temptr--;             temptr1--;             temp1--;             temp--;             }         else         {           *result = -*result+*temptr-*temptr1+'1'+'9';           result++;           *result='1';           temp1--;            temp--;           temptr--;           temptr1--;             }           } if(temp>0)   {        while(temp>0)       {        if((-*result+*temptr)>=0)          {           *result= '0'+(-*result+*temptr);           if(temp!=1)           {            result++;            *result='0';            }           temp--;           temptr--;                             }        else        {         *result= '1'+'9'-'0'+(-*result+*temptr);         result++;         *result='1';         temp--;         temptr--;         }         }     if(*result=='0')       {        if(*temptr=='-')        {         *result='-';         ++result;         *result='\0';         }        else         *result='\0';        }     else       {        if(*temptr=='-')        {         ++result;         *result='-';         ++result;         *result='\0';         }         else         {          ++result;         *result='\0';          }        }     } else    {     if(*result=='0')      {       --result;                    while(*result=='0')          --result;          ++result;        if(*temptr=='-')        {         *result='-';         ++result;         *result='\0';         }        else         *result='\0';        }     else       {        if(*temptr=='-')        {         ++result;         *result='-';         ++result;         *result='\0';         }         else         {          ++result;         *result='\0';          }        }         }         }      } int main() {  char *str = "abcdabbabcacbaabcdabcababc";  char *sub_str = "ab";  char result[100];  char *str1="-1462";  char *str2="473";  char re[10];  alg(str1, str2, re);  deletestr(str, sub_str, result);  cout << result << " " << re;  system("pause");  return 0;  }
本文档为【华为机试】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_851543
暂无简介~
格式:doc
大小:35KB
软件:Word
页数:12
分类:互联网
上传时间:2012-09-05
浏览量:27