【问题标题】:How do you extract a string that is in between a char/string in C++?如何提取 C++ 中字符/字符串之间的字符串?
【发布时间】:2015-05-11 14:47:37
【问题描述】:

假设我有一个简单的字符串:

string example = "phone number: XXXXXXX,"

其中 X 是给我的随机值,所以它们总是不同的。 如何只提取 X? "phone number: " 不会改变。

我现在拥有的(使用下面的 Thomas Matthews 技术)

const char search_text[] = "phone number: ";
std::string::size_type start_posn = example.find(search_text);
std::string::size_type end_posn = example.find(",", start_posn);
const unsigned int length = end_posn - start_posn - sizeof(search_text) - 1;
cout << "length: " << length << endl;
std::string data = example.substr(start_posn, length);
cout << data << endl;

如果我有string example = "phone number: XXXXXXX, Date: XXXXXXXX,"呢?

【问题讨论】:

标签: c++ string extract


【解决方案1】:

嗯,看起来您会搜索“电话号码:”,然后确定该短语后面的索引或位置。您的要求推断在您想要的数据之后有一个“,”。

因此,您希望在“:”和“,”之间使用substring。在过去,我们会搜索“,”并获得它的位置。两个索引相减得到要提取的字符数:
Edit 1

const char search_text[] = "phone number: ";
std::string::size_type start_posn = example.find(search_text);
if (start_posn != std::string::npos)
{
   start_posn += sizeof(search_text) - 1;
}
std::string::size_type end_posn   = example.find(",", start_posn);
const unsigned int length = end_posn - start_posn;
std::string data = example.substr(start_posn, length);

注意:上面的代码不处理find方法返回std::string::npos的错误情况。

使用上述技术,您将如何提取“日期:”之后的数据?

【讨论】:

  • 感谢您的提示。我还在想你的问题。如果我有"phone number: XXXXXXX, phone number: XXXXXXX," 之类的东西怎么办?你怎么得到第二个而不是第一个?
  • 忽略第一次扫描并再次扫描。想想。
  • 使用你的方式我仍然得到phone number: XXXXXXX,逗号消失了,但phone number: 仍然存在。
  • 需要在起始位置加上“电话号码:”的长度。
  • 是的,我将长度切换为 7,它给了我字符串 phone n 的前 7 个字符。
猜你喜欢
  • 1970-01-01
  • 2013-12-11
  • 2015-08-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
相关资源
最近更新 更多