在C ++中提取分隔符之间的子字符串

时间:2017-01-21 16:46:15

标签: c++

我必须得到两个引号之间的子串“Debian GNU / Linux 8(jessie)”,如:

PRETTY_NAME="Debian GNU/Linux 8 (jessie)"

但我不知道怎么办不能做到这一点。

我实际拥有的最佳代码:

std::ifstream osVersion("/usr/lib/os-release");
std::string os_str;
if (osVersion.is_open())
    getline(osVersion, os_str);
osVersion.close();
this->os = os_str.substr(os_str.find("\""), os_str.find("\""));

它提供了类似的输出:

"Debian GNU/

2 个答案:

答案 0 :(得分:1)

问题在于你做什么

this->os = os_str.substr(os_str.find("\""), os_str.find("\""));

find在每次通话中找到相同的"。这意味着您将在第一个"开始子字符串,然后N个字符长,N是第一个"的位置。

您可以通过捕获第一个"的位置并使用它来获取下一个

来解决此问题。
std::size_t pos = os_str.find("\"");
this->os = os_str.substr(pos + 1, os_str.find("\"", pos + 1) - pos - 1);

请注意,为了使代码弹出证明你应该捕获两个位置并确保不等于std::string::npos如果他们中的任何一个你有一个格式不正确的刺痛而且上面的方法会崩溃

答案 1 :(得分:0)

c.Send(buffer);在这里更容易使用:

std::find