华为机试题(附源代码C++)_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 华为机试题(附源代码C++)

华为机试题(附源代码C++)

 2010/9/19 23:30:10  mxdxm  http://mxdxm.javaeye.com  我要评论(0)
  • 摘要:编程题(共2题,第一题40分,第二题60分,共100分。请上机编写程序,按题目要求提交文件。[详见考试说明]本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。1.删除字符串中所有给定的子串(40分)问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数:intdelete_sub_str(constchar*str,constchar*sub_str,char*result_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<iostream>
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(k1<k2)
???? {
????? temp=k2;
????? temp1=k1;
????? temptr=p2;
????? temptr1=p1;
????? }
?? else
??? {
???? while(*ptr1==*ptr2)
????? {
?????? ++ptr1;
?????? ++ptr2;
?????? }
???? if((*ptr1-*ptr2)>0)
?????? {
??????? 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;
?}

发表评论
用户名: 匿名