2011-10-13 113 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; 
}