2011-10-13 84 views
-2

我已经编写了一个程序来显示字符串中的重复字符,但如果它出现超过2次,它会再次显示字符。任何解决方案准确找到它?如何在字符串中显示重复的字符?

//查找字符串中的字符重复........

#include<iostream> 
using namespace std; 
int main() 
{ 
    int i,j; 
    char ar[100]; 
    cout<<"enter string:"; 
    cin.getline(ar,100); 
    for(i=0;ar[i]!='\0';i++) 
    { 
     for(j=i+1;ar[j]!='\0';j++) 
     { 
      if(ar[i]==ar[j]) 
      { 
       cout<<ar[i]<<endl; 
       break; 
      } 
     } 
    } 

    system("pause"); 
    return 0; 
} 
+9

得到一些纸和一支铅笔(或黑板)和通过什么程序做的步骤。成为软件工程师的第一步! –

+0

@ 0A0D如果j从0开始,这意味着我比较第一个字符与第一...然后diplays它,以及...我认为这不是问题 –

+0

@baljeetSingh:您还没有定义你的问题。你是否试图从'aabadaa'中删除'aa'这样的东西来制造'坏'? – 2011-10-13 16:05:01

回答

2

你应该跟踪的每个字符出现了多少次:

int count[256]; // <-- assuming char is 8 bytes 
for(i=0;i!=256;++i) 
{ 
    count[i] = 0; // <-- set all counts to be zero 
} 
for(i=0;ar[i]!='\0';i++) 
{ 
    count[ar[i]] = count[ar[i]] + 1; 

    // now you can check if count is 1, and if so then do whatever 
} 
+0

ü可以用完整的程序解释呢? –

+0

@baljeetSingh这是一个提示。这是你的工作,把完整的程序在一起,但我在这里给核心理念。 –

3

另一种方法是对字符串中的字符进行排序,然后检查排序后的字符串。

重复的字符很容易找到,因为它们会彼此相邻。

1

这里是示例代码来查找字符串中的重复字符。完整的代码将可在http://java2novice.com/java-interview-programs/duplicate-string-character-count/

public void findDuplicateChars(String str){ 

    Map<Character, Integer> dupMap = new HashMap<Character, Integer>(); 
    char[] chrs = str.toCharArray(); 
    for(Character ch:chrs){ 
     if(dupMap.containsKey(ch)){ 
      dupMap.put(ch, dupMap.get(ch)+1); 
     } else { 
      dupMap.put(ch, 1); 
     } 
    } 
    Set<Character> keys = dupMap.keySet(); 
    for(Character ch:keys){ 
     if(dupMap.get(ch) > 1){ 
      System.out.println(ch+"--->"+dupMap.get(ch)); 
     } 
    } 
} 

0

下面是代码适用于[A-Z],但它是非常节省空间。因为它只用两个整数来找到解决方案。谢谢。

public class AllDuplicatesInString 
{ 
    static class BitSet 
    { 
     int justPresent, moreThanOnce; 

     BitSet() 
     { 
      justPresent = moreThanOnce = 0; 
     } 

     void set(int k) 
     { 
      if(isSetJustPresent(k)) 
      { 
       k = k - 'a'; 
       moreThanOnce = moreThanOnce | (1<<k); 
       return; 
      } 
      k = k - 'a'; 
      justPresent = justPresent | (1<<k); 
     } 
     boolean isSetJustPresent(int k) 
     { 
      k = k - 'a'; 
      return (justPresent & (1<<k))!=0; 
     } 
     boolean isSetMoreThanOnce(int k) 
     { 
      k = k - 'a'; 
      return (moreThanOnce & (1<<k))!=0; 
     } 
    } 
    public static String duplicateChars(String str) 
    { 
     if(str==null || str.equals("")){ 
      throw new NullPointerException(); 
     } 
     BitSet b = new BitSet(); 
     for(int i=0;i<str.length();i++){ 
      b.set(str.charAt(i)); 
     } 
     StringBuilder stringBuilder = new StringBuilder(); 
     for(int i=0;i<26;i++){ 
      if(b.isSetMoreThanOnce(i+'a')){ 
       stringBuilder.append((char)(i+'a')); 
      } 
     } 
     return stringBuilder.toString(); 
    } 

    public static void main(String[] args) 
    { 
     String str = "aaaabbbbjjjjsfsfzcncnzcmcncmnczmjsdjs"; 
     System.out.println(duplicateChars(str)); 
    } 
} 
1

我希望这将有助于:

#include <iostream> 
using namespace std; 

int main() { 
    char str[50]; 
    cout << "Enter a string" << endl; 
    gets(str); 

    for(int i=0; str[i]!='\0'; i++) 
    { 
     for(int j=i+1; str[j]!='\0'; j++) 
     { 
      if(str[i]==str[j]) 
      cout << "Character " << str[i] << " is repeated" << endl; 
     } 
    } 


    return 0; 
}