提取 C++ 中分量之间的子字符串
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);
}
相关文章:
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 两个字符串之间的数学运算
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- 正则表达式匹配字符串之间的数字
- 如何更有效地计算n个字符串之间的不匹配分数?
- 最接近的字符串:在字符串阵列中找到2个字符串之间的最小距离
- 在字符串之间插入字符
- STD :: cin和Scanf()应用于字符串之间的区别
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 如何在C 中的字符串之间留出空间
- 在文本中的两个非唯一字符串之间获取子弦
- 假定相同的字符串之间的比较失败' == '比较
- C++提取两个字符串之间的数据
- C++ 和 pascal 字符串之间的区别
- 如何在C++中获取子字符串并在字符串之间添加字符
- 在C++代码中,如何让用户在2个文本字符串之间输入一个数字
- 如何在Visual C 中的BSTR和32位Unicode字符串之间进行转换