华为机试题(3)

1.       给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成bz换成aZ换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数

void  Stringchangconst  char*inpu,char*output

其中input是输入字符串,output是输出字符串

[cpp] view plain copy print ?
  1. #include <stdio.h>   
  2. #include <string.h>   
  3.   
  4. void  Stringchange(const  char* input,char* output)  
  5. {  
  6.     while(*input)  
  7.     {  
  8.         if(*input>='a'&& *input<= 'y' || *input>='A' && *input<= 'Y')  
  9.         {  
  10.             * output = *input+1;  
  11.             output++;  
  12.             input++;  
  13.         }  
  14.         else if(*input == 'z' || *input == 'Z')  
  15.         {  
  16.             * output = *input-25;  
  17.             output++;  
  18.             input++;  
  19.         }  
  20.         else  
  21.         {  
  22.             * output = *input;  
  23.             output++;  
  24.             input++;  
  25.         }  
  26.           
  27.     }  
  28.     *output = '\0';  
  29.   
  30. }  
  31. int main(/*int argc, char **argv*/)  
  32. {  
  33.     const char input[20]="zzzzZZZZabcABC";  
  34.     char output[20];  
  35.     Stringchange(input,output);  
  36.     printf("output is %s",output);  
  37.     system("pause");  
  38.     return 0;  
  39. }  

2.       求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。

函数为  int sameint num

其中num是输入的整型数字

[cpp] view plain copy print ?
  1. #include <stdio.h>   
  2. #include <string.h>   
  3.   
  4. int same(int num)  
  5. {  
  6.     int tmp[20];  
  7.     int m=0;  
  8.     int i,j;  
  9.     while(num>0)  
  10.     {  
  11.         tmp[m]=num%10;  
  12.         num/=10;  
  13.         m++;  
  14.     }  
  15.     for(i=0;i<m-3;i++)  
  16.         for(j=i+2;j<m-1;j++)  
  17.             if(tmp[i]==tmp[j] && tmp[i+1]==tmp[j+1])  
  18.                 return 1;  
  19.     return 0;  
  20.       
  21. }  
  22. int main(/*int argc, char **argv*/)  
  23. {  
  24.     int ret;  
  25.     ret=same(173654123);  
  26.     printf("ret is %d",ret);  
  27.     system("pause");  
  28.     return 0;  
  29. }  



1.从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]array2[2]比较开始,到array1[2]array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3

  函数原型为 int compare_array( int len1, int array1[], int len2, int array2[] );

  其中,len1len2分别为数组array1[]array2[]的长度,函数返回值为两个数组不同元素的个数。

[cpp] view plain copy print ?
  1. #include <stdio.h>   
  2. #include <string.h>   
  3.   
  4. int compare_array( int len1, int array1[], int len2, int array2[] )  
  5. {  
  6.     int i=0;  
  7.     int cnt=0;  
  8.     printf("hello in compare_array\n");  
  9.     while (len1-1-i>=0 && len2-1-i>=0)  
  10.     {  
  11.         if(array1[len1-1-i]!=array2[len2-1-i])  
  12.             cnt++;  
  13.         i++;  
  14.           
  15.     }  
  16.     return cnt;  
  17.   
  18. }  
  19. int main(/*int argc, char **argv*/)  
  20. {  
  21.       
  22.     int ret;  
  23.     int array1[5]={77,21,1,3,5};  
  24.     int array2[4]={1,3,5,7};  
  25.     printf("hello\n");  
  26.     ret=compare_array(5,array1,4,array2);  
  27.     printf("ret is %d",ret);  
  28.     system("pause");  
  29.     return 0;  
  30. }  


 判断一个数是不是回文数:

[cpp] view plain copy print ?
  1. #include <stdio.h>   
  2. #include <string.h>   
  3.   
  4. int huiwen(long num)  
  5. {  
  6.     int tmp[50];  
  7.     int m=0;  
  8.     int begin;  
  9.     int end;  
  10.     while(num>0)  
  11.     {  
  12.         tmp[m]=num%10;  
  13.         num/=10;  
  14.         m++;  
  15.     }  
  16.     begin = 0;  
  17.     end = m-1;  
  18.     while(begin<end)  
  19.     {  
  20.         if(tmp[begin++]!=tmp[end--])  
  21.             return 0;  
  22.     }  
  23.     return 1;  
  24. }  
  25. int main(/*int argc, char **argv*/)  
  26. {  
  27.     int ret;  
  28.     long num=1234554321;  
  29.     ret = huiwen(num);  
  30.     if(ret == 0)  
  31.         printf("not huiwen\n");  
  32.     else if(ret == 1)  
  33.         printf("huiwen\n");  
  34.     system("pause");  
  35.     return 0;  
  36. }  


 删掉重复的字符,只保留一个。

[cpp] view plain copy print ?
  1. #include <stdio.h>   
  2. #include <string.h>   
  3.   
  4. void changestr(const char *pIn,char *pOut)  
  5. {  
  6.     char *r=pIn;  
  7.     char *s=pIn;  
  8.       
  9.     *pOut++ = *pIn;  
  10.   
  11.     while(*++pIn!='\0')  
  12.     {  
  13.         if(*pIn != *r++)  
  14.             *pOut++ = *pIn;  
  15.     }  
  16.     *pOut = '\0';  
  17. }  
  18.   
  19. int main(/*int argc, char **argv*/)  
  20. {  
  21.       
  22.     char pIn[20]="goorooogllle";  
  23.     char pOut[20];  
  24.     changestr(pIn,pOut);  
  25.     printf("%s ",pOut);  
  26.   
  27.     system("pause");  
  28.     return 0;  
  29. }  

你可能感兴趣的:(System,input,华为,output)