当前位置:  开发笔记 > 编程语言 > 正文

如何在C++中搜索std :: string中的子字符串?

如何解决《如何在C++中搜索std::string中的子字符串?》经验,为你挑选了2个好方法。

我正在尝试用C++解析一个简单的字符串.我知道字符串包含一些带冒号的文本,紧接着是一个空格,然后是一个数字.我想只提取字符串的数字部分.我不能只是在空间上进行标记(使用sstream和<<),因为冒号前面的文本可能有也可能没有空格.

一些示例字符串可能是:

总磁盘空间:9852465

可用磁盘空间:6243863

部门:4095

我想使用标准库,但如果您有其他解决方案,您也可以发布,因为其他有相同问题的人可能希望看到不同的解决方案.



1> Brian R. Bon..:
std::string strInput = "Total disk space: 9852465";
std::string strNumber = "0";
size_t iIndex = strInput.rfind(": ");
if(iIndex != std::string::npos && strInput.length() >= 2)
{
  strNumber = strInput.substr(iIndex + 2, strInput.length() - iIndex - 2)
}


它不能保证工作.标准说如果找不到任何东西,`find`返回`npos`,它定义了`npos = -1`.但是,`npos`的类型为`std :: size_t`.某些编译器会发出警告,将unsigned与有符号数进行比较,并根据设置将其视为错误
不要使用`!= -1`!请改用`!= string :: npos`.
那更好 - 我的性格类型喜欢看到为什么以某种方式做事情的解释,而不仅仅是从上面传下来的一些法令:-)

2> Adam Rosenfi..:

为了完整起见,这是C中的简单解决方案:

int value;
if(sscanf(mystring.c_str(), "%*[^:]:%d", &value) == 1)
    // parsing succeeded
else
    // parsing failed

说明:%*[^:]说要读入不是冒号的许多可能的字符,并且*抑制赋值.然后,在冒号和任何插入的空格之后读入整数.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有