2017-04-26 4 views
-2

Das folgende Snippet erzeugt ein Ergebnis von "Computern", aber wie es dieses Kunststück vollbringt, ist weniger als offensichtlich. Ich suche eine Erklärung, wie genau der Code dieses Ergebnis erzielt. Hinweis: Ich suche keine Debugging-Hilfe. Ich möchte nur die Logik verstehen.Verwendung von strcmp in C-Programmierung

strcpy(s1, "computer"); 
strcpy(s2, "science"); 

if(strcmp(s1, s2) < 0) 
{ 
    strcat(s1, s2); 
} 
else 
{ 
    strcat(s2, s1); 
} 
s1[strlen(s1) - 6] = '\0'; 
+3

Dieser Code funktioniert nicht. Es ist voller Syntaxfehler. Wenn Sie sich fragen, wie diese Funktionen funktionieren, benötigen Sie ein besseres C-Referenzbuch. Die Standardbibliothek von C ist im Vergleich zu den meisten anderen Sprachen ziemlich klein, daher ist es immer gut, eine Referenz zu haben, um zu sehen, wie diese Funktionen funktionieren. – tadman

+2

@helpSeeker Was ist genau unklar? –

+0

Verwenden Sie einen Debugger und überprüfen Sie die Werte der Variablen nach jeder Zeile. Suchen Sie in der Dokumentation nach Funktionen, die Sie nicht verstehen. –

Antwort

1

Okay, lassen Sie uns zuerst ein funktionierendes Beispiel für den Code sehen und dann werde ich erklären, wie es funktioniert:

#include <stdio.h> 
#include <string.h> 

void main() { 

    char s1[100], s2[100]; 

    strcpy(s1, "computer"); 
    strcpy(s2, "science"); 

    if(strcmp(s1, s2) < 0) 
    { 
    strcat(s1, s2); 
    } 
    else 
    { 
    strcat(s2, s1); 
    } 

    s1[strlen(s1) - 6] = '\0'; 
    printf("%s",s1); 
} 

Variable s1 wird auf "Computer" und s2 bekommt eingestellt auf "Wissenschaft". Der erste String-Vergleich mit strcmp() wertet aus, ob s1 einen geringeren Wert als s2 hat. Wenn ja, dann wird s1 mit s2 verknüpft, so dass der neue Wert von s1 "computerscience" wäre. Ansonsten, ob die Strings denselben Wert haben oder s2 größer als s1 ist, wird s2 mit s1 verkettet, wobei s2 den resultierenden Wert von "sciencescomputer" hat.

Die if-Bedingung, die zu einem wahren Ergebnis führt, ist, dass "Computer" weniger als "Wissenschaft" ist, also ändert sich der Wert von s1 und wird "Computerwissenschaft". Der Wert 6 wird dann von der Länge von s1 subtrahiert, und bei diesem Index, der zufällig das Zeichen "c" enthält, wird ein Nullzeichen als der Wert dieses Elements gesetzt. Also, jetzt ist der Wert von s1 "Computer \ 0ience". Dies bedeutet, dass, wenn s1 an printf() übergeben wird, diese Funktion jedes Zeichen bis zum Erreichen des Nullzeichens ausgibt und dann die Funktion aufhört, den Nullwert sowie die darauffolgenden Zeichen anzuzeigen.

+0

Vielen Dank für deine Antwort. Also, was macht s1 weniger als s2? Wie ich weiß, ist das "c" vom ersten Buchstaben des "Computers" die Dezimalzahl 99 gemäß der ASCII-Tabelle und "s" vom ersten Buchstaben in "Wissenschaft" ist die Dezimalzahl 115 gemäß der ASCII-Tabelle. Ist das das, was strcmp vergleicht? Es tut mir leid, wenn das verwirrend klingt. Ich bin verwirrt und finde es schwierig, meine Frage richtig zu formulieren. – helpSeeker

+1

Gern geschehen. Der Vergleich wird durchgeführt, indem jedes Zeichen in jeder der zwei Zeichenfolgen betrachtet wird, und der Vergleich endet, wenn die Zeichen nicht übereinstimmen. Hier ist ein Link, den Sie nützlich finden können: https://www.techonthenet.com/c_language/standard_library_functions/string_h/strcmp.php, das sich mit strcmp in C beschäftigt. – slevy1