[英]Extract a substring between delimeters in 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/
问题是你什么时候做
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
不相等。如果两个位置都不正确,则上述方法会崩溃。
std::find
在这里更易于使用:
std::string::iterator begin = std::find(std::begin(os_str), std::end(os_str), '"');
if (begin != std::end(os_str)) {
++begin;
std::string::iterator end = std::find(begin, std::end(os_str), '"');
this->os = std::string(begin, end);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.