题目:
用原型 void getDate(int &dd, int &mm, int &yy);写一个函数,从键盘读入一个形如dd-mmm-yy的日期。其中dd是一个1位或2位的表示日的整数,mmm是月份的3个字母的缩写,yy是两位数的年份。函数读入这个日期,并将它们以数字形式传给3个参数。
解答:
#include <iostream>
using namespace std;
void getDate(int &dd, int &mm, int &yy);
int main()
{
int d, m, y;
getDate(d, m, y);
system("pause");
return 0;
}
void getDate(int &dd, int &mm, int &yy)
{
char ch[10];
cout << "请输入一个形如dd-mmm-yy的日期(其中dd是一个1位或2位的表示日的整数," << endl;
cout << "mmm是月份的三个字母的缩写,yy是两位数的年份):" << endl;
cin >> ch;
int len = strlen(ch);
if (len == 8)
{
dd = ch[0] - '0';
yy = (ch[6] - '0') * 10 + (ch[7] - '0');
switch (ch[2])
{
//首字母不重复的月份:
//二月
case 'F':mm = 2; break;
//九月
case 'S':mm = 9; break;
//十月
case 'O':mm = 10; break;
//十一月
case 'N':mm = 11; break;
//十二月
case 'D':mm = 12; break;
//首字母重复的月份
//一月,六月,七月
case 'J':
if (ch[3] == 'a')
{
mm = 1;
break;
}
else
{
if (ch[4] == 'n') mm = 6; break;
if (ch[4] == 'l') mm = 7; break;
}
//三月,五月
case 'M':
if (ch[2] == 'r') mm = 3; break;
if (ch[2] == 'y') mm = 5; break;
//四月,八月
case 'A':
if (ch[3] == 'p') mm = 4; break;
if (ch[3] == 'u') mm = 8; break;
}
}
if (len == 9)
{
dd = (ch[0] - '0') * 10 + (ch[1] - '0');
yy = (ch[7] - '0') * 10 + (ch[8] - '0');
switch (ch[3])
{
//首字母不重复的月份:
//二月
case 'F':mm = 2; break;
//九月
case 'S':mm = 9; break;
//十月
case 'O':mm = 10; break;
//十一月
case 'N':mm = 11; break;
//十二月
case 'D':mm = 12; break;
//首字母重复的月份
//一月,六月,七月
case 'J':
if (ch[4] == 'a')
{
mm = 1;
break;
}
else
{
if (ch[5] == 'n') mm = 6; break;
if (ch[5] == 'l') mm = 7; break;
}
//三月,五月
case 'M':
if (ch[3] == 'r') mm = 3; break;
if (ch[3] == 'y') mm = 5; break;
//四月,八月
case 'A':
if (ch[4] == 'p') mm = 4; break;
if (ch[4] == 'u') mm = 8; break;
}
}
cout << endl << "你输入的是" << yy << "年" << mm << "月" << dd << "日" << endl << endl;
}