地图编号介于1到12之间的月份名称

时间:2016-02-11 05:40:15

标签: c++

我需要制作一个根据用户输入显示一个月的程序。例如,如果用户输入8,则会显示August。我不能使用if语句或任何检查条件的东西。我还必须使用函数.substr()。我必须使用包含所有月份的字符串。

例如,string months = "January...December";

1 个答案:

答案 0 :(得分:-2)

编辑:替换if块的“用户输入检查”try-catch以符合OP限制:“我不能使用if语句< / EM>“

您可以格式化“月”string以满足您的需求。最长的月份名称是9月(9个字母),因此填写“月份”,每月最多包含9个字母的空格:

std::string months="January  February March    April    May      June     July     August   SeptemberOctober  November December ";

然后你可以使用用户输入作为substr的索引,假设用户输入在1到12之间。即:

input--;    // Indexes start at 0
input *= 9; // Scale it to word length

// Use substr as requested. Remember 9 is the max length of the month name
std::string selectedMonth = months.substr(input, 9); 

如果需要,您可以按照here

所述修剪尾随空格

请考虑这是一个易于理解的教学示例,有足够的改进空间。完整代码:

#include <iostream>
using namespace std;

int main() 
{

    int input = 0;
    cin >> input;

    string months="January  February March    April    May      June     July     August   SeptemberOctober  November December ";

    input--;    // Indexes start at 0
    input *= 9; // Scale it to word length

    string selectedMonth;
    try
    {
        // Use substr as requested. Remember 9 is the max length of the month name
        selectedMonth = months.substr(input, 9);
    }
    catch (out_of_range &ex)
    {
        cout << "error: input must be in the range [1, 12]";
    }
    // Trim it before outputting if you must
    cout << selectedMonth;
    return 0;
}