在c++程序中显示子字符串
Display a substring in c++ program
问题是:编写一个程序,允许输入一个表示月份编号(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);
}
相关文章:
- 字符串-C++后显示的随机字符
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 显示字符串的集合和子集
- 在将字符插入 2d 字符串时如何不显示空字符?
- 两个数组,int 和 string,如何显示带有对应 int 的字符串?
- 为什么我的 cout 在输出中没有显示字符串?
- 为什么在为其分配编号后无法显示我的字符串值?
- 分段故障 11,从类函数显示动态 C 字符串
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- 输出显示多个带整数的字符串值
- 字符串显示上的智能感知:npos = 18446744
- 如何从显示板将字符显示为字符串?
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 使用宏显示宏的字符串化内容
- 我将如何将数组的显示从数字更改为字符串C++
- 如何让我的构造函数和函数工作,以便我的 main() 能够同时显示字符串和 int 数据
- C 我将如何在字符串中显示字符作为数字
- 如何使用另一个字符串显示三个浮点数的最大值?
- 如何比较"4A4B4C"(字符串显示十六进制值)实际字符串"JKL"