C++中删除字符串连续重复字符有三种方法:一、用std::unique配合erase原地修改;二、双指针遍历手动去重;三、用stringstream构建新字符串。

如果您需要在 C++ 中删除字符串中所有连续重复的字符,使其仅保留每组连续相同字符中的第一个,可以借助标准库算法与容器成员函数组合实现。以下是解决此问题的步骤:
一、使用 std::unique 与 std::string::erase 组合
std::unique 算法作用于迭代器范围,将连续重复元素压缩为单个,并返回新逻辑结尾的迭代器;它不改变容器大小,因此需配合 erase 成员函数移除尾部冗余元素。该方法原地修改字符串,时间复杂度为 O(n),且不额外分配内存。
1、包含必要头文件:#include
2、定义 std::string 变量并初始化,例如:std::string s = "aaabbbcccaaa";。
立即学习“C++免费学习笔记(深入)”;
3、调用 s.erase(std::unique(s.begin(), s.end()), s.end());。
二、手动遍历双指针法
通过维护两个索引:一个指向当前待写入位置(slow),另一个遍历整个字符串(fast),仅当 s[fast] ≠ s[fast−1] 时将字符复制到 slow 位置。该方法完全可控,不依赖算法库,适合理解底层逻辑或嵌入式受限环境。
1、声明整型变量 int slow = 0, fast = 0;。
2、检查字符串是否为空,若为空则直接返回。
3、将首字符保留在位置 0:s[slow++] = s[fast++];。
4、循环遍历剩余字符:当 fast 时,若 s[fast] != s[fast - 1],执行 s[slow++] = s[fast];,然后 fast++。
5、使用 s.erase(slow); 截断字符串至 slow 长度。
三、使用 std::stringstream 构建新字符串
逐字符读取原字符串,仅在当前字符与前一字符不同时追加至 stringstream。该方法语义清晰、无副作用,适用于不可变原字符串场景或需保留原始数据的情况。
1、包含头文件:#include
2、声明 std::stringstream ss;。
3、检查字符串长度,若大于 0,则先写入首字符:ss 。
4、从索引 1 开始遍历:for (int i = 1; i 。
5、在循环体内判断:if (s[i] != s[i-1]) ss 。
6、提取结果:s = ss.str();。


















