c++ - 使用迭代器构建字符串

标签 c++ string

给定一个 std::string 类型的字符串 s,我像这样构建另一个字符串s2

std::string(s.begin(), s.begin() + s.find(" "))

但是下面的构造函数不起作用

std::string(s.begin(), s.find(" "))

有人知道为什么吗?我在 Ubuntu amd64 下使用 g++ 4.8.1

两个构造函数都有一个迭代器作为第二个参数。

在此示例中,我尝试构建一个包含第一个子字符串的字符串,该子字符串以第一个空格出现的位置结束。

最佳答案

std::string::find() 返回一个偏移量,而不是迭代器(是的,这很大程度上是标准库的设计不一致)。因此,要使用它(并包括适当的错误检查),请执行以下操作:

size_t offset = s.find(" ");
std::string(s.begin(), (offset == std::string::npos ? s.end() : s.begin() + offset);

关于c++ - 使用迭代器构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212735/

相关文章:

c++ - 如何限制通过 cin 输入的字符数?

c++ - 为什么lock_guard需要Lockable概念

c++ - Arduino ISR—— vector 的多种定义

iphone - 匹配 NSString 中单词的开头

php - 如何使用正则表达式将字符串拆分为二维数组?

c++ - 如何检查 SQLite 数据库是否在 C/C++ 中打开

c++ - 如何使用 Bison %destructor 指令

javascript - JS 中在字符串前面添加不定冠词的简单方法?

C strcpy 是如何工作的,它会改变原始字符串的大小吗?

c# - 将请求 QueryString 转换为十进制