bir*_*n04 0 c++ string iterator std
我想从字符串中 char 的第一次出现到字符串末尾获取一个子字符串。我以为我可以只使用构造函数,就像在这个问题中一样,但它并没有真正起作用。当我这样做时:
string(input.find(' ')+1, input.end()-1)
Run Code Online (Sandbox Code Playgroud)
我面临“无构造函数”错误
error: no matching constructor for initialization of 'std::__cxx11::string' (aka 'basic_string<char>')
Run Code Online (Sandbox Code Playgroud)
如何解决此问题并使我的代码正常工作?
我认为这input是一个std::string
如果您查看 的文档std::string::find,您会发现它返回找到的字符的索引;不是迭代器。为了使用迭代器构造函数,您必须使用:
auto str = std::string(input.begin() + input.find(' '), input.end());
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下substr成员input:
auto str = input.substr(input.find(' '));
Run Code Online (Sandbox Code Playgroud)
您示例中的 +1 和 -1 令人困惑。如果添加1至第一,那么你得到的子开始后找到的字符,而不是从字符开始。如果从末尾减去 1,则复制到最后一个字符之前的一个,而不是直到字符串的末尾。
请注意,您可能还需要处理找不到字符的情况。构造函数方法(正如我已经实现的那样)会有未定义的行为。该substr方法将引发异常。
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |