C++从字符串中选择N个字符

4
我有一个字符串,假设它是string a = "abcde";
现在我只想选择其中的几个字符(比如从第一位到第三位)。
在Python中,我会这样写: a[1:3]。但是在C++中不允许这么做,它只能用这种方式: a[n],而不能用a[n:x]的形式。
是否有一种方法来从C ++的字符串中选择n个字符呢?
或者我需要使用erase()吗?

3
在字符串类中使用substr()函数。 - user3813674
5
std::string::substr()可以满足你的需求。 - πάντα ῥεῖ
1
你可以使用子字符串,或者使用for循环将范围内的每个项附加到空字符串中。 - Malik Brahimi
2个回答

15
您可以使用substr()函数:
std::string a = "abcde";
std::string b = a.substr(0, 3);

请注意索引从0开始。

如果您想要缩短字符串本身,确实可以使用erase()函数:

a.erase(3); // removes all characters starting at position 3 (fourth character)
            // until the end of the string

@UP.iaprograms - 你说的 str.erasestr.end() 是什么意思? - Danny_ds
@UP.iaprograms - 好的,你可能想要使用 str.erase(str.end());str.end() 指向字符串的结尾,所以你不能使用它。请参考 http://www.cplusplus.com/reference/string/string/end/ - _"返回一个指向字符串结尾后面字符的迭代器"_。而且这样也不会删除任何东西。 - Danny_ds
@ Danny_ds 谢谢。现在,我用 str.end() - 1,它按照我想要的方式工作了。 - Urh
@UP.iaprograms - 是的,但你甚至不需要那个。你可以使用 str.erase(3) 从位置3开始擦除到结尾 - 参见我的答案。 - Danny_ds

6
如果您想重新分配对象,可以编写例如
std::string a = "abcde";

a = a.substr( 0, 3 );

然而,要选择字符并不需要改变对象本身。类std::string的大多数成员函数都接受两个参数:字符串中的初始位置和要处理的字符数。此外,您还可以使用迭代器来处理所选字符,例如a.begin()std::next(a.begin(), 3)。您可以在许多标准算法中使用指定字符串范围的迭代器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接