📜  在 C++ 中打印字符串中的重复字符(1)

📅  最后修改于: 2023-12-03 15:23:07.465000             🧑  作者: Mango

在 C++ 中打印字符串中的重复字符

在 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是输入字符串的长度。