将日期格式转换为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/