You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++处理Oct 15 2021格式日期转数字串的前导零及年份问题求解

C++ 日期格式转换修复方案

核心问题修复点

  • 兼容月份大小写输入:将提取的月份统一转小写后匹配,避免Oct这类首字母大写的输入匹配失败
  • 月/日补前导零:引入<iomanip>格式化库,输出时设置固定宽度2位,不足自动补前导零
  • 年份仅保留后两位:年份转换为整数后对100取模,2000年前后的年份都能正确输出最后两位
  • 支持输出MMDDYY格式结果,也可直接将三个值存入整数数组返回

修复后完整代码

#include <conio.h>
#include <string>
#include <iostream>
#include <cctype>
#include <iomanip> // 新增格式化输出头文件
using namespace std;

bool GetDate(int* dptr, int* mptr, int* yptr)
{
    string date, day, month, year;

    cout << "\n Please enter a date: ";
    getline(cin, date);

    month = date.substr(0, 3);
    // 月份转小写,兼容大小写输入
    for (char& c : month) {
        c = tolower(c);
    }
    day = date.substr(4, 2);
    year = date.substr(8, 4);

    string month_array[12] = { "jan","feb","mar","apr","may","jun",
                               "jul","aug","sep","oct","nov","dec" };

    bool monthMatch = false;
    for (int i = 0; i < 12; ++i) {
        if (month == month_array[i]) {
            *mptr = i + 1;
            monthMatch = true;
            break;
        }
    }
    // 增加月份匹配失败的校验
    if (!monthMatch) {
        return false;
    }

    *dptr = stoi(day);
    *yptr = stoi(year) % 100; // 年份取模100,仅保留后两位

    return true;
}

int main()
{
    int day, month, year;
    int* d = &day, * m = &month, * y = &year;

    if (GetDate(d, m, y)) {
        // 格式化输出,补前导零,输出MMDDYY格式
        cout << "\n\n\n formatted date is:  " 
             << setfill('0') 
             << setw(2) << month 
             << setw(2) << day 
             << setw(2) << year << endl;
        // 如果需要整数数组,直接声明即可,整数本身不存储前导零,输出时格式化即可
        int dateArr[3] = {month, day, year};
        // 可按需使用dateArr数组
    }
    else {
        cout << "incorrect date";
    }

    _getch();

    return 0;
}

注意说明

整数类型本身无法存储前导零,所以如果需要保留前导零的存储格式,可以将结果存入字符串数组,数值场景下仅在输出时做格式化处理即可。

内容的提问来源于stack exchange,提问作者Vahan Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:45:03