在字符串中显示重复的字符

时间:2017-10-20 19:16:07

标签: c++ arrays string

我在C ++中编写了一些代码来在字符串中显示重复的字符,但是如果一个字符重复了三次以上,代码会多次打印重复的字符。

例如,如果字符串为aaaddbss,则只能打印ads,但会打印aaads

我做错了什么?

cout << " Please enter a string" << endl;

cin.getline(input, 100); //  example input (ahmad wahidy) the output reads a a h a d instead of a h d 

for (int i = 0;input[i]!='\0'; i++)
{
    for (int j = i+1;input[j]!='\0'; j++)
    {
        if (input[i] == input[j])
        {
            cout << input[i] << " ";
        }
    }

}
cout << endl;

3 个答案:

答案 0 :(得分:3)

为什么不使用简短的标准方法,而不是使用自己的自定义方法?

给定std::string input文本,这将打印唯一的字符:

std::set<char> unique(input.begin(), input.end());
for (auto & c : unique)
{
    std::cout << c << " ";
}
std::cout << std::endl;

答案 1 :(得分:1)

您可以使用std::countstd::set

#include <string>
#include <set>
#include <iostream>
using namespace std;

int main()
{
    string s = "hellohowareyou";
    set<char>the_set(s.begin(), s.end());
    for (char i:the_set)
        if (count(s.begin(), s.end(), i) > 1)
            cout << i << endl;


}

输出:

e
h
l
o

答案 2 :(得分:0)

如果您不被允许使用map(并且可能也不允许使用set),您可以简单地使用整数数组来计算出现次数,每次可能有一个条目char值。请注意,字符 - 当作为ASCII值时 - 可以直接用作数组的索引;但是,为避免负指数,应首先将每个字符值转换为无符号值。

#include <iostream>
#include <limits>

int main() {

    const char* input = "aaaddbss";
    int occurrences[UCHAR_MAX+1] = { 0 };
    for (int i = 0;input[i] !='\0'; i++)
    {
        unsigned char c = input[i];
        if (occurrences[c]==0) {
            occurrences[c]++;
        }
        else if (occurrences[c]==1) {
            occurrences[c]++;
            cout << "duplicate: " << c << endl;
        }
    }cout << endl;
}