在 C++ 中如何提取介于 char/string 之间的字符串?
How do you extract a string that is in between a char/string in C++?
假设我有一个简单的字符串:
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,"
会怎样?
嗯,看来您要搜索 "phone number: ",然后确定短语后的索引或位置。您的要求推断出您想要的数据后有一个“,”。
因此,您需要 substr
ing 在“:”和“,”之前。在过去,我们会搜索“,”并获得它的位置。要提取的字符数是通过减去两个索引得到的:
编辑 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
方法returnsstd::string::npos
.
的错误情况
使用上面的技术,你将如何提取"Date: "之后的数据?
假设我有一个简单的字符串:
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,"
会怎样?
嗯,看来您要搜索 "phone number: ",然后确定短语后的索引或位置。您的要求推断出您想要的数据后有一个“,”。
因此,您需要 substr
ing 在“:”和“,”之前。在过去,我们会搜索“,”并获得它的位置。要提取的字符数是通过减去两个索引得到的:
编辑 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
方法returnsstd::string::npos
.
使用上面的技术,你将如何提取"Date: "之后的数据?