C ++ String.substr输出不正确

时间:2013-01-29 01:53:23

标签: c++ string substring

尝试将字符串拆分为多个部分。格式将始终如下name from number on date

需要拆分namenumberdate

代码:

string name, number, date;

size_t from = s.find(" from ");
size_t on = s.find(" on ");

name = s.substr(0, from);
number = s.substr(from + 6, on);
date = s.substr(on + 4);

cout << "name:" << name << ", num:" << number << ", date:" << date << endl;

示例输入:John Smith from N656 on 01012013

sampe输出:name:John Smith, num: N656 on 01012013, date:01012013

因此在尝试创建子串number时显然存在问题,但我很好奇是什么原因造成这种情况,因为其他两个正在工作。

1 个答案:

答案 0 :(得分:4)

我认为您假设s.substr接受开始/结束索引。

实际上是这样的: s.substr(pos, size)

  包含
的第一个字符的

pos 位置   大小子字符串的长度

所以,以一种丑陋的方式:

name = s.substr(0, from);
number = s.substr(from + 6, on - (from + 6));
date = s.substr(on + 4);