C++学习笔记 string篇

1. 连接字符串 +

string str1 = "hello";
string str2 = "world";
string str = str1 + str2;// "helloworld"

2. 查找 find()

  1. 找到了匹配的内容,则返回下标
  2. 没找到匹配内容,返回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());
  1. 第一步remove(string::iterator begin, string::iterator end, char ch);
    返回的是迭代器,如果删除了n个a,则返回倒数第n个位置的迭代器
  2. 第二步 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

猜你喜欢

转载自blog.csdn.net/weixin_45827203/article/details/129651475
今日推荐