在c++程序中显示子字符串

Display a substring in c++ program

本文关键字:字符串 显示 c++ 程序      更新时间:2023-10-16

问题是:编写一个程序,允许输入一个表示月份编号(1-12)的整数,并且程序应该显示相应月份的缩写。示例:如果输入为3,则输出应为Mar,表示三月。提示:将所有月份缩写存储在一个大字符串中months="JanFeb-MarApr MayJunJulAugSepOct-NovDec"

这是我到目前为止的代码:

#include <iostream>
using namespace std;
int main()
{
    int x;
    string months = "JanFebMarAprMayJunJulAugSepOctNovDec";
    cout << "Enter an integer between (1-12): " << endl;
    cin>>x;
    cout<<"n"<<months.substr(x,3);
    return 0;
}

问题:不知道如何获得相应的缩写。

#include <iostream>
using namespace std;
int main()
{
    int x;
    string months = "JanFebMarAprMayJunJulAugSepOctNovDec";
    cout << "Enter an integer between (1-12): " << endl;
    cin >> x;
    cout << months.substr((x-1)*3, 3);
    return 0;
}

请参阅:http://ideone.com/0x9amY

注意事项:您应该执行边界检查,否则可能会得到"std::out_of_range"

此外,这样储存几个月也没有任何好处。使用普通容器:

string months[] = { "Jan", /* and so on */ };

你几乎做到了:

const auto n = 3*(x-1);
const auto &abbr = months.substr(n, 3);
std::cout << abbr << std::endl;

你没有得到哪个部分?C++是零基础的事实?

您应该指定与处理的月份匹配的起始字符,即:

months.substr( 3*(x-1), 3 );

无论如何,这不是更好的方式。为了你的目的,你应该更好地使用数组,这样:

const char* month[] = { "Jan", "Feb", ... };
...
cout << month[x-1] << std::endl;

要"显示子字符串",您实际上不必使用substr创建临时string。相反,您可以直接将write转换为std::cout;只需输入指向要打印的第一个字符(即&months[(x - 1) * 3])的指针,以及要打印的字符数:

#include <iostream>
#include <string>
#include <cassert>
using namespace std;
int main()
{
    const string months = "JanFebMarAprMayJunJulAugSepOctNovDec";
    cout << "Enter an integer between (1-12): n";
    int x;
    if (cin >> x && 1 <= x && x <= 12)
        (cout << 'n').write(&months[(x - 1) * 3], 3);
}