2017-07-22 3 views
-5

Ich habe zwei Saiten a, b gleicher Länge l1, l2 jeweils. Ich möchte die Anzahl der gemeinsamen Buchstaben für die gegebenen zwei Zeichenfolgen zurückgeben. ZB a = 'ABC' und b = 'CDE'. Mein Algorithmus sollte 1 zurückgeben, da nur "C" der gemeinsame Buchstabe in beiden Zeichenfolgen ist, aber stattdessen 26 zurückgibt. Könnte jemand bitte erklären warum? Das folgende ist mein Algorithmus.Algorithmus zu suchen, um nach Zeichenfolgenübereinstimmung zu suchen

for(i=0;i<l1;i++) 
    { 
     for(j=0;j<l2;j++) 
     { 
      if(a[i]==b[j]) 
      { 
       found++; 
      } 
     } 
    } 
+0

gefunden als int-Typ deklariert wird – user4532954

+0

... und auf Null gesetzt, auch? – deamentiaemundi

+2

Haben Sie 'int found = 0;' initialisiert? – Rabbid76

Antwort

-4
It's return 1 
char a[3]={'a','b','c'}; 
     char b[3]={'c','d','e'}; 
    int found=0,l1=3,l2=3; 
     for(int i=0;i<l1;i++) 
     { 
      for(int j=0;j<l2;j++) 
      { 
       if(a[i]==b[j]) 
       { 
        found++; 
       } 
      } 
     } 
+0

Ich denke, dass sie nach einer Erklärung suchten, keine Bestätigung, dass ihr Code _should_ funktionieren sollte. Aus irgendeinem Grund funktioniert es nicht für das OP, aber diese Person muss einige weitere Details bereitstellen, um die richtige Hilfe zu erhalten. Siehe [MCVE]. – CDahn

0

würde Ihr Algorithmus Ihre Kriterien scheitern. Es ist leicht zu sehen, was passieren würde, wenn eine Zeichenfolge 'CCC' wäre.

wie folgt tun:

int letters[26]={0}; 
int both[26]={0}; 

for(int i=0; i<l1; i++) 
    letters[a[i]-'A']=1; 

for(int i=0; i<l2; i++) 
    if(letters[b[i]-'A']) 
     both[b[i]-'A']=1; 

int found=0; 

for(int i=0; i<26; i++) 
    found+=both[i]; 
+0

Sie können loswerden 'für (int i = 0; i <26; i ++) Buchstaben [i] = 0;' und tun 'int Buchstaben [26] = {0};' –

+0

Danke. Außerdem wurde ein Fehler behoben. – klutt

0
// with this code I preferred to convert all char as an ascii code. //Because it is more simpler to compare int value than with 2 for statement //.it has compared if chars are similar ,increase the number of sayi,then //print the equal char of these code 
int main(){ 
char a[]="ABC"; 
char b[]="CDE"; 
    int sizeofa=sizeof(a)-1; 
    int sizeofb=sizeof(b)-1; 
    int sayi=0; 
    int asciia; 
    int asciib; 
    for (int i=0; i<sizeofa;i++) 
    { 
    for (int j=0; j<sizeofb; j++) 
    { 
     asciia=a[i]; 
     asciib=b[j]; 
    if (asciia == asciib) 
     sayi++; 
    } 

    } 
    printf("%d",sayi); 
} 
+1

'sizeof stringarray - 1' wird normalerweise als' strlen (stringarray) 'geschrieben (der Compiler wird (hoffentlich) auf die gleiche Konstante optimiert). – pmg

+0

Ich habe den gleichen Code in der folgenden Art und Weise ausprobiert, aber ich bekomme die Ausgabe als 26 statt 4. – user4532954

+0

, als ich versuchte, diesen Code gab mir 1. wahrscheinlich das Problem ist in der Konvertierung zu ASCII. –

Verwandte Themen