C++编写程序判断年月中输入中年份与月份用反斜杠隔开的问题

img


问题举例:
当输入为2041 9时,程序判断无误,输出为30,而当输入为2041\9时,程序输出为31。
另附源码如下


#include<iostream>
using namespace std;
int main()
{
    int year,mon;
    cin>>year>>mon;
    if(year%4==0)
    {
        if(year%100!=0)
        {
            if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
            {
                cout<<"31"<<endl;
            }else if(mon==2)
            {
                cout<<"29"<<endl;
            }else
            {
                cout<<"30"<<endl;
            }
            
        }else if(year%400==0)
        {
            if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
            {
                cout<<"31"<<endl;
            }else if(mon==2)
            {
                cout<<"29"<<endl;
            }else
            {
                cout<<"30"<<endl;
            }
        }else
        {
            if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
            {
                cout<<"31"<<endl;
            }else if(mon==2)
            {
                cout<<"28"<<endl;
            }else
            {
                cout<<"30"<<endl;
            }
        }
    }else
    {
        if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
        {
            cout<<"31"<<endl;
        }else if(mon==2)
        {
            cout<<"28"<<endl;
        }else
        {
            cout<<"30"<<endl;
        }
    }
    return 0;
}


#include<iostream>
#include<sstream>
#include<algorithm>
using namespace std;

int main()
{
    string str;
    cin >> str;
    replace(str.begin(), str.end(), '\\', ' ');

    int year, mon;
    stringstream s(str);
    s >> year >> mon;
    cout << year << " " << mon;
    //这里放你后面的代码
    return 0;
}

这不是

【以下回答由 GPT 生成】

问题解决方案如下:

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

int main()
{
    string input;
    getline(cin, input);  // 读入包含年份和月份的字符串

    istringstream iss(input);
    int year, mon;

    if (iss >> year)
    {
        if (iss.peek() == '\\' && iss.ignore())
        {
            if (iss >> mon)
            {
                if (year % 4 == 0)
                {
                    if (year % 100 != 0 || year % 400 == 0)
                    {
                        if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
                        {
                            cout << "31" << endl;
                        }
                        else if (mon == 2)
                        {
                            cout << "29" << endl;
                        }
                        else
                        {
                            cout << "30" << endl;
                        }
                    }
                    else
                    {
                        if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
                        {
                            cout << "31" << endl;
                        }
                        else if (mon == 2)
                        {
                            cout << "28" << endl;
                        }
                        else
                        {
                            cout << "30" << endl;
                        }
                    }
                }
                else
                {
                    if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
                    {
                        cout << "31" << endl;
                    }
                    else if (mon == 2)
                    {
                        cout << "28" << endl;
                    }
                    else
                    {
                        cout << "30" << endl;
                    }
                }
            }
        }
    }
    return 0;
}

解决方案说明:

  1. 使用getline函数读取一行输入,包含年份和月份的字符串存储在input变量中。
  2. 使用istringstream从input中读入年份和月份,同时忽略反斜杠字符。
  3. 使用嵌套的if条件语句判断闰年和月份的天数,输出结果。

这样的改进可以避免直接读取两个整数之后的反斜杠字符,进而导致输出错误。同时使用stringstream可以更方便地处理字符串输入。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^