c++ 现在几点钟?

题目描述写一个程序把一个用hour:minute表示的美国时间转换成美式英语表示的时间(按下面的格式)。这里是转换的规则:(注意他们可能不同于你习惯的英国规则)第一个字符... 题目描述

写一个程序把一个用 hour:minute 表示的美国时间转换成美式英语表示的时间(按下面的格式)。
这里是转换的规则:( 注意他们可能不同于你习惯的英国规则)
第一个字符以大写字母写输出
复合的英文数目是带有连字符号的,举例来说:
forty-four
用[x_in_english] o'clock 来表示 x:00
用Quarter past [x_in_english] 来表示 x:15
用[x_in_english] thirty 来表示 x:30
用Quarter to [next_hour_in_english] 来表示 x:45
以别的方式来表示其它x:nn
[x_in_english] [nn_in_english] 当 nn<45
[60-nn_in_english] to [next_hour_in_english] 当 nn>45

Examples:
5:00 Five o'clock
10:10 Ten ten
9:22 Nine twenty-two
5:15 Quarter past five
2:30 Two thirty
6:40 Six forty
5:45 Quarter to six
8:47 Thirteen to nine
12:47 Thirteen to one (American time: 1:00 follows 12:00)

输入

单独的一行包括一个以hour:minutes表示的时间。
每一个hour属于[1..12],minutes总是成表示成两位在[0..59]的范围里。
输出

单独的一行包括一个被表示成英文的时间。
样例输入
5:45

样例输出
Quarter to six
展开
 我来答
拥云庄主
推荐于2016-09-03 · TA获得超过2501个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:410万
展开全部

刚写的,呵呵,应该能满足你的要求:

#include <iostream>
#include <string>
using namespace std;
//数字对应的英文数组 
char *EnNumArry[]={"zero","one","two","three","four","five","six","seven","eight", "nine","ten", 
     "eleven ","twelve", "thirteen","fourteen","fifteen","sixteen","seventeen",
     "eighteen","nineteen ","twenty","twenty-one", "twenty-two", "twenty-three", 
     "twenty-four", "twenty-five","twenty-six","twenty-seven","twenty-eight",
     "twenty-nine","thirty","thirty-one","thirty-two","thirty-three","thirty-four",
     "thirty-five","thirty-six","thirty-seven","thirty-eight","thirty-nine","forty",
     "forty-one","forty-two","forty-three","forty- four"};
//函数名:NumTimeToStr 
//作用:将数字时间转换为英文时间
string NumTimeToStr(string strNumTime)
{
 int iIndex = strNumTime.find(":");
 if (iIndex == -1)
 {
  return "Time format error!";
 }
 int iHour = atoi(strNumTime.substr(0, iIndex).c_str());
 int iMinute = atoi(strNumTime.substr(iIndex + 1, strNumTime.length() - iIndex - 1).c_str());
 if (iHour > 12)
 {
  iHour = iHour % 12;
 }
 else if (iHour <= 0)
 {
  return "Time format error!";
 }
 if (iMinute > 59)
 {
  return "Time format error!";
 }
 
 string strRet ; 
 if (iMinute == 0)
 {
  strRet = (string)EnNumArry[iHour] + " o'clock.";
 }
 else if (iMinute >= 45)
 {
  ++iHour;
  if (iHour > 12)
  {
   iHour = 1;
  }
  int iLeft = 60 - iMinute;
  if (iMinute == 45)
  {
   strRet = (string)"Quarter to " + (string)EnNumArry[iHour];
  }
  else
  {
   strRet =  (string)EnNumArry[iLeft] + " to "  + EnNumArry[iHour];
  }  
 }
 else
 {
  if (iMinute == 15)
  {
   strRet = (string)"Quarter past " + (string)EnNumArry[iHour];
  }
  else
  {
   strRet =  (string)EnNumArry[iHour] + " "  + EnNumArry[iMinute];
  }
 }
 if (strRet[0] >= 'a' && strRet[0] <= 'z')
 {
  strRet[0] -= 32;
 }
 return strRet;
}

int  main(int argc, char *argv[])
{  
 string strInput;
 cout<<"Enter time(exit to stop):"<<endl;
 cin>>strInput;
 while (strInput != "exit")
 {
  cout<<NumTimeToStr(strInput)<<endl;
  cout<<"Enter time(exit to stop):"<<endl;
  cin>>strInput;
 }
 return 0;
}

 

我这是连续运行的,输入一行,显示结果,你可以按自己的需要修改。

运行截图:

运行中,输入exit结束。 

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式