【问题标题】:C++ String.substr Outputs Incorrectly [closed]C++ String.substr 输出不正确[关闭]
【发布时间】:2013-01-29 01:53:23
【问题描述】:

尝试将字符串拆分为多个部分。格式永远是这样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

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

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

【问题讨论】:

  • 我不认为 number 应该打印出"N656 on 01012013",即使它按照您的预期工作,而是打印出"N656"

标签: c++ string substring


【解决方案1】:

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

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

pos 要包含的第一个字符的位置
size 子字符串的长度

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

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

【讨论】:

  • 它可能很难看。我整天都在盯着 C++,我想我实际上变得更糟了。谢谢!
  • @frankV: 请记住,您还可以使用一对迭代器初始化一个字符串以获得子字符串:string name(&amp;s[0], &amp;s[from]); string number(&amp;s[from + 6], &amp;s[on]); string date( &amp;s[on + 4], &amp;s[s.size()]); 但是,仍然不漂亮......我不知道我是哪个不喜欢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2014-11-15
  • 2018-09-13
  • 1970-01-01
  • 2022-11-03
  • 2021-04-22
相关资源
最近更新 更多