Vai*_*orn 39 c++ string substring
我想制作一个程序,以字符串格式读取一些数字并输出如下:如果数字是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;
}
Run Code Online (Sandbox Code Playgroud)
Ghi*_*rny 67
如果我是正确的,第二个参数substr()应该是子串的长度.怎么样
b = a.substr(i,2);
Run Code Online (Sandbox Code Playgroud)
?
pax*_*blo 22
如所示在这里,第二个参数substr是长度,而不是结束位置:
string substr ( size_t pos = 0, size_t n = npos ) const;生成子字符串
返回一个字符串对象,其内容初始化为当前对象的子字符串.此子字符串是从字符位置开始
pos并具有n字符长度的字符序列.
b = a.substr(i,i+1);对于以下值,您的行将生成i:
substr(0,1) = 1
substr(1,2) = 23
substr(2,3) = 345
substr(3,4) = 45 (since your string stops there).
Run Code Online (Sandbox Code Playgroud)
你需要的是什么 b = a.substr(i,2);
您还应该知道,对于像12045这样的数字,您的输出看起来很有趣.12 20 4 45由于您正在使用atoi()字符串部分并输出该整数,因此您将得到.你可能会想尝试只是outputing字符串本身,这将是两个字符:
b = a.substr(i,2);
cout << b << " ";
Run Code Online (Sandbox Code Playgroud)
事实上,整个事情可以更简单地写成:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string a;
cin >> a;
for (int i = 0; i < a.size() - 1; i++)
cout << a.substr(i,2) << " ";
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158030 次 |
| 最近记录: |