我想制作一个程序,以字符串格式读取一些数字并输出如下:如果数字是12345,那么它应输出12 23 34 45 . 我尝试使用c字符串库中的substr()函数,但它给了我奇怪的结果 - 它输出1 23 345 45而不是预期的结果 . 为什么?
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main(void)
{
string a;
cin >> a;
string b;
int c;
for(int i=0;i<a.size()-1;++i)
{
b = a.substr(i,i+1);
c = atoi(b.c_str());
cout << c << " ";
}
cout << endl;
return 0;
}
7 回答
如果我是正确的,substr()的第二个参数应该是子字符串的长度 . 怎么样
?
如here所示,
substr
的第二个参数是长度,而不是结束位置:对于
i
的值,您的行b = a.substr(i,i+1);
将生成:你需要的是
b = a.substr(i,2);
你还应该知道你的输出对于像12045这样的数字看起来很有趣 . 你会得到
12 20 4 45
,因为你在字符串部分使用atoi()
并输出那个整数 . 您可能想尝试只输出两个字符长的字符串本身:事实上,整个事情可以更简单地写成:
另一个有趣的变体问题可能是:
如何在不使用其他字符串的情况下将
"12345"
设为"12 23 34 45"
?会跟着吗?
您可以使用c中的以下代码获得上述输出
不使用
substr()
的可能解决方案substr(i,j)
表示从索引i
开始(假设第一个索引为0)并接下来j
个字符 . 这并不意味着上升到索引j
.Possible solution with string_view