林惜城


私信TA

用户名:reminder

访问量:31283

签 名:

等  级
排  名 91
经  验 9060
参赛次数 0
文章发表 95
年  龄 0
在职情况 学生
学  校 西安电子科技大学
专  业

  自我简介:

哈姆


解题思路:

本题输入的不是3个整数而是字符串,所以难点在于如何高效的把字符串转成数字。我的想法是把输入的读入一个char数组,遍历此数组,遇到'-'就切换,遇到数字就加到另一个存放日期数据的数组里。要定义俩数组,挺麻烦的。


注意事项:

(1)C++中strlen()函数要添头文件<cstring>,IDE会自动加上,但是这里不通过。

(2)肯定有其他更聪明的做法,我这方法就是歌姬吧。


参考代码:

#include <iostream>
#include <cstring>
using namespace std;

class Date {
public:
	void Set(short y, short m, short d) {
		year = y;
		month = m;
		day = d;
	}
	void print() {
		cout << year << ":" << month << ":" << day << endl;
	}
private:
	short year;
	short month;
	short day;
};
int main()
{
	short numDate[3] = { 0, 0, 0 }; //存储字符串转数字后的年月日
	char strDate[10]; //以char数组形式输入
	cin >> strDate; //读字符串
	int index = 0; //numDate数组下标
	for (int i = 0; i < strlen(strDate); i++) {
		if (strDate[i] != '-') {
			numDate[index] += (strDate[i] - '0'); //char减去0的ascii码即为实际数字
			numDate[index] *= 10; //保证位数顺序,之后要统一除10一次
		}
		else {
			index++; //遇到'-'就开始读下一个数字
		}
	}
	for (int i = 0; i < 3; i++) {
		numDate[i] /= 10; //统一除10
	}
	Date date;
	date.Set(numDate[0], numDate[1], numDate[2]);
	date.print();
	return 0;
}



 

0.0分

2 人评分

  评论区

  • «
  • »