📅  最后修改于: 2023-12-03 15:23:07.465000             🧑  作者: Mango
在 C++ 中,我们可以使用一个简单的算法来打印字符串中的重复字符。这个算法不需要任何额外的数据结构,只需要使用一个布尔数组来跟踪每个字符是否已经出现过。当我们扫描字符串时,如果一个字符已经在布尔数组中标记为“出现过”,那么我们就可以把它输出出来。
下面是一个示例代码片段,它演示了如何打印出给定字符串中的所有重复字符:
#include <iostream>
#include <string>
void printDuplicateChars(const std::string& str) {
bool charSet[256] = { false };
for (char c : str) {
int val = static_cast<int>(c);
if (charSet[val]) {
std::cout << c << " ";
} else {
charSet[val] = true;
}
}
}
在这个例子中,我们首先将一个大小为 256 的布尔数组初始化为 false。这些数组的每个索引表示 ASCII 表中的某个字符。在我们扫描字符串时,我们将输入字符串的每个字符转换为整数值,并使用这个值作为数组的索引。如果该字符之前已经在布尔数组的索引处标记为“已经出现过”,则我们输出该字符。否则,我们将该字符的索引标记为“已经出现过”。
下面是一个使用示例,展示了如何调用该函数并打印出字符串中的所有重复字符:
int main() {
std::string str = "Hello, world!";
std::cout << "Duplicate Characters: ";
printDuplicateChars(str);
return 0;
}
这将输出以下结果:
Duplicate Characters: l o
在这个示例中,我们遍历了整个字符串,并打印出了所有重复的字符。由于“l”和“o”在字符串中出现了多次,因此我们将它们打印出来了。
总结一下,打印字符串中的重复字符是一个简单的问题,在 C++ 中可以用一个布尔数组来实现。我们只需要扫描一遍输入字符串,并使用布尔数组来跟踪每个字符是否已经出现过。这个算法的时间复杂度是O(n),其中n是输入字符串的长度。