gpt4 book ai didi

c - 我怎样才能在C中将日期转换为可读的英文格式

转载 作者:行者123 更新时间:2023-11-30 21:26:02 25 4
gpt4 key购买 nike

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

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

最佳答案

我建议您的方法有两个改进领域:

  1. 首先理解输入,然后产生输出
  2. 摘要!

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

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

现在变量中有三个数字:

int 日、月、年;

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

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

记住如何在 C 中定义函数。您不想重复自己。因此,如果您定义了一个处理序数“第一”、“第二”等的 switch 语句,则您不需要单独的 switch 语句来处理“二十第一”、“二十第二”等。 11-19 是英语中的特例,但 21st-29th 的工作方式与 41st-49th 完全相同。

所以你需要类似的东西

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”是“1994”,那么“2010”也不是“2010”。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com