目录
1. 连接字符串 +
string str1 = "hello";
string str2 = "world";
string str = str1 + str2;// "helloworld"
2. 查找 find()
- 找到了匹配的内容,则返回下标
- 没找到匹配内容,返回
string::npos
例如:
string str = "how are you";
int pos = str.find("are"); // 返回 4
pos = str.find("was"); // 返回 string::npos
if (pos!=string::npos)
printf("Found, pos = %d\n", pos);
else
printf("Not found!\n");
3. 删除指定元素 erase() + remove()
如果不知道具体的场景,即元素保存在什么样的容器中,是不能从序列中移除元素的。因此,“移除元素的”算法也无法做到这一点,它们只会重写被选择的元素或者忽略复制的元素。移除操作不会改变被“移除”元素的序列的元素个数。 所以我们还需要使用
erase()
来改变序列元素个数达到删除的目的!
// 删除str中的 'a' 元素
// 需要 #include <algorithm>
// 写法1
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());
// 写法2
string::iterator it = std::remove(str.begin(), str.end(), 'a');
str.erase(it, str.end());
- 第一步
remove(string::iterator begin, string::iterator end, char ch);
返回的是迭代器,如果删除了n个a,则返回倒数第n个位置的迭代器 - 第二步
str.erase(string::iterator begin, string::iterator end);
删除末尾不要的字符做到真正移除指定元素。
4. 输出内容
// 方法1
for (unsigned int i=0; i<str.size(); ++i)
{
printf("%c", str[i]);
}
// 方法2
for (string::iterator it = str.begin(); it!=str.end(); ++it)
{
printf("%c", *it);
}
5. 一些注意的点 begin() end() size() empty()
bool empty() const noexcept
{
// test if sequence is empty
return (size() == 0);
}
string str = "12345";
str.begin(); // 0
str.end(); // 6 最后一个有效位+1
str.size(); // 6 最后一个有效位+1