華爲歷年機試題型總結系列(四)

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章