2014-04-11 34 views
-4

用C例如將日期格式轉換成英語可讀的格式:14/08/1994應該打印爲14個月1900和90只four.I已經寫代碼一天,一個月一年,如果以同樣的方式寫的代碼會變得冗長我怎麼可以把日期爲可讀格式英語用C

#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    char *str,case_ch; 
    int lv=0; 
    str=(char *)malloc(11*sizeof(char)); 
    printf("enter the date in this format dd/mm/yyyy"); 
    scanf("%s",str); 
    for(lv=0;str[lv];lv++) 
    { 
     if(str[lv]=='0') 
     { 
      switch(str[lv+1]) 
      { 
       case '1': 
        printf("first"); 
        break; 
       case '2': 
        printf("second "); 
        break; 
       case '3': 
        printf("third "); 
        break; 
       case '4': 
        printf("fourth "); 
        break; 
       case '5': 
        printf("fifth "); 
        break; 
       case '6': 
        printf("sixth "); 
        break; 
       case '7': 
        printf("seventh "); 
        break; 
       case '8': 
        printf("eigth "); 
        break; 
       case '9': 
        printf("nineth "); 
        break; 
       default: 
        printf("input wrong"); 
        break; 
      } 
      break; 
     } 
     else if(str[lv]=='1') 
     { 
      switch(str[lv+1]) 
      { 
       case '0': 
        printf("tength "); 
        break; 
       case '1': 
        printf("eleventh "); 
        break; 
       case '2': 
        printf("twelevth "); 
        break; 
       case '3': 
        printf("thiteenth "); 
        break; 
       case '4': 
        printf("fourteenth "); 
        break; 
       case '5': 
        printf("fifteenth "); 
        break; 
       case '6': 
        printf("sixteenth "); 
        break; 
       case '7': 
        printf("seventeenth "); 
        break; 
       case '8': 
        printf("eigteenth "); 
        break; 
       case '9': 
        printf("nineteenth "); 
        break; 
       default: 
        printf("input wrong"); 
        break; 
      } 
      break; 
     } 
     else if(str[lv]=='2') 
     { 
      switch(str[lv+1]) 
      { 
       case '0': 
        printf("twenteeth "); 
        break; 
       case '1': 
        printf("twenty first"); 
        break; 
       case '2': 
        printf("twenty second "); 
        break; 
       case '3': 
        printf("twenty thrid "); 
        break; 
       case '4': 
        printf("twenty fourth "); 
        break; 
       case '5': 
        printf("twenty fifth "); 
        break; 
       case '6': 
        printf("twenty sixth "); 
        break; 
       case '7': 
        printf("twenty seventh "); 
        break; 
       case '8': 
        printf("twenty eighth"); 
        break; 
       case '9': 
        printf("twety ningth"); 
        break; 
       default: 
        printf("input wrong"); 
        break; 
      } 
      break; 
     } 
     else if(str[lv]=='3') 
     { 
      switch(str[lv+1]) 
      { 
       case '0': 
        printf("thrity "); 
        break; 
       case '1': 
        printf("thirty first"); 
        break; 
       default: 
        printf("invalid input"); 
        break; 
      } 
      break; 
     } 
     else 
     { 
      printf("invalid input"); 
      break; 
     } 
    } 
    for(lv=3;str[lv];lv++) 
    { 
     if(str[lv]=='0') 
     { 
      switch(str[lv+1]) 
      { 
       case '1': 
        printf("jan"); 
        break; 
       case '2': 
        printf("Feb"); 
        break; 
       case '3': 
        printf("March "); 
        break; 
       case '4': 
        printf("April"); 
        break; 
       case '5': 
        printf("May "); 
        break; 
       case '6': 
        printf("june "); 
        break; 
       case '7': 
        printf("july "); 
        break; 
       case '8': 
        printf("august"); 
        break; 
       case '9': 
        printf("september "); 
        break; 
       default: 
        printf("input wrong"); 
        break; 
      } 
      break; 
     } 
     else if(str[lv]=='1') 
     { 
      switch(str[lv+1]) 
      { 
       case '0': 
        printf("october"); 
        break; 
       case '1': 
        printf("november"); 
        break; 
       case '2': 
        printf("december"); 
        break; 
       default: 
        printf("invalid input"); 
        break; 
      } 
      break; 
     } 
     else 
     { 
      printf("invalid input"); 
      break; 
     } 

    } 
    /*how to write code for year if i write in the above manner the code will be tooo lenghty*/ 
} 
+0

如果我一直在設置這個功課,我可能會通過看'的sscanf()開始'讀取日期字符串成三個'int's。 – TripeHound

+0

你需要嘗試一些東西,而不是尋求幫助沒有人會爲你寫代碼! – Engine

+0

我試過了,但它變得太冗長了代碼 – user3165666

回答

1

我建議的改進兩個方面你的方法:

  1. 先了解輸入,然後產生輸出
  2. 抽象!

首先使用scanf將您的輸入理解爲三個數字(%d)。

端節點:你正在處理輸入字符串的方式是危險的;您不僅在使用malloc而不使用free(內存泄漏),您正在將任意大小的輸入讀入固定大小的緩衝區(緩衝區溢出 - >軟件中的崩潰或安全​​漏洞)。

現在你已經有三個數字變量:

int day,month,year;

...這是一個好得多的抽象。

接下來,花一分鐘思考的%操作。 1994 % 100爲94. 1994/100 % 100爲19.

請記住如何用C定義函數。您不想重複自己。所以如果你定義了一個switch語句來處理序數「first」,「second」等等,你不需要一個單獨的switch語句來處理「二十一」,「二十二」等等。數字11-19是英文中的一個特例,但21至29日的工作方式與41至49日完全相同。

所以你需要沿着

void printOrdinalNumber(int n) 
{ 
    if(n < 20) 
    { 
     switch(n) 
     { 
      ... 
     } 
    } 
    else 
    { 
     int tens = n/10; 
     int ones = n % 10; 

     switch(tens) 
     { ... } 

     if(ones >= 1) 
      printOrdinalNumber(ones); 
    } 
} 

你需要爲基數做同樣的東西線,你需要處理的特殊情況多年。確定如果「1994」是「19,94」,「2001」不是「二十一」。而如果「1994」是「1919」,那麼「2010」仍然不是「二十一」。

+0

非常感謝,我採取了輸入作爲字符串,因爲我的家庭作業的問題是像that.Now我會先轉換成字符串編號,然後我會用你的方法繼續 – user3165666

+0

所以如果你喜歡我的回答,不要忘了正式接受。 – wolfgang

相關問題