2012-04-02 12 views
0

Ich bin neu in C und ich versuche, eines der Übungsproblem von K & R Buch zu lösen. Das Problem besteht darin, festzustellen, ob eine gegebene Zeichenfolge mit demselben Inhalt einer anderen Zeichenfolge endet.Unerwartetes Ergebnis in Zeigerarithmetik, in C

Zum Beispiel, wenn String eins ratandcat und String zwei ist cat. Dann ist es wahr, dass String zwei in String eins endet. Um das zu lösen, habe ich eine halbe Lösung gefunden und mich mit Zeigern getroffen.

Meine Idee ist es, die Position zu finden, wo die Zeichenfolge endet und auch die Position der Zeichenfolge zwei beginnt, so dass ich weiter fortfahren kann. Ich habe diesen Code:

int strEnd(char *s,char *t){ 
    int ans,slength =0 ,tlength = 0; 
    while(*s++) 
     slength++; 
    while(*t++) 
     tlength++; 
    s += slength - tlength; 
    printf("%c\n",*t); 
    printf("%c\n",*s); 
    return ans; 
} 
void main() { 
    char *message = "ratandcat"; 
    char *message2 = "at"; 
    int a = strEnd(message,message2); 
} 

Aber seltsam diese Ausgänge:

% 
(and a blank space) 

Aber ich möchte, dass meine s Zeiger auf a zeigen. Aber das tut es nicht. Was läuft hier falsch?

Vielen Dank im Voraus.

+2

Sie wollten wahrscheinlich den ursprünglichen Zeiger hier verschieben: 's + = slength - tlength;' nicht der eine bewegte sich bis zum Ende der Zeichenfolge. –

Antwort

2

Ein Problem ist, dass Sie den Zeiger s an das Ende der Zeichenfolge erhöht haben, und dann fügen Sie mehr Zeug hinzu. Sie könnten diese Schleife mit so etwas wie zu tun:

while(s[slength]) 
    ++slength; 

Ein weiteres Problem ist, dass man davon aus, dass die s String länger ist als die andere. Was ist, wenn es nicht ist? Und beheben Sie das ; Problem von Simon bemerkt.

1

Sie haben ein zusätzliches Semikolon am Ende der

while(*t++); 

Das bedeutet, dass tlength nie erhöht, da nur das Semikolon (leere Anweisung) in der Schleife ausgeführt wird.