将日期格式转换为C语言中的英语可读格式,例如:1994年8月14日,它应打印为14八月194。如果以相同的方式编写,则我已经写了年月日代码,如果代码会变得冗长

#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*/
}

最佳答案

我建议您改善方法的两个方面:


首先了解输入,然后产生输出
抽象!


首先使用scanf将您的输入理解为三个数字(%d)。

侧节点:处理输入字符串的方式很危险;您不仅使用malloc而不使用free(内存泄漏),而且还在将任意大小的输入读取到固定大小的缓冲区中(缓冲区溢出->崩溃或软件中的安全漏洞)。

现在,您在变量中有了三个数字:

日,月,年

...这是一个更好的抽象。

接下来,花点时间考虑%运算符。 1994 % 100是94。1994 / 100 % 100是19。

记住如何在C中定义函数。您不想重复自己。因此,如果您定义了一个处理序号“ first”,“ second”等的switch语句,则不需要单独的switch语句来处理“二十一”,“二十二”等。 11-19是英语的特例,但21st-29的工作方式与41st-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”是“十九个九十四”,则“ 2001”不会出现为“二十一个”。而且,如果“ 1994”是“ 1949”,那么“ 2010”也不是“ 2,000”。

关于c - 我如何将日期转换为C可读的英语格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23010877/

10-11 21:02