Beschreibung der Testumgebung

Assembler-Projekt 1.31 - Gruppe 4
  Beschreibung
Quellcode
Erzeugen der ausführbaren Datei
Ausgabe des Programms
 
Navigation: Projekthauptseite

Beschreibung

Das Testprogramm t_strcmp.cpp demonstriert anhand einiger exemplarischer Strings die Verwendung der Funktionen strcmp, strncmp, strcmpnew und strncmpnew. Im ersten Teil des Programms werden die Funktionen strcmp und strcmpnew miteinander verglichen, im zweiten Teil die Funktionen strncmp und strncmpnew.

Stringvergleiche mit strcmp/strcmpnew

  1. zwei gleiche Strings
  2. zwei Strings mit gleichem Anfang, aber verschiedenem Ende
  3. die gleichen Strings wie bei 2. aber in umgekehrter Reihenfolge
  4. zwei Leerstrings
  5. ein Leerstring und ein nicht leerer String
  6. die gleichen Strings wie bei 5. aber in umgekehrter Reihenfolge

Stringvergleiche mit strncmp/strncmpnew

  1. zwei Strings, die bis zum n-ten Zeichen gleich sind
  2. zwei Strings, die sich ab dem n-ten Zeichen unterscheiden
  3. die gleichen Strings wie bei 2. aber in umgekehrter Reihenfolge
  4. Vergleich zweier Strings bis zum 0. Zeichen
  5. Vergleich zweier Strings mit einem n größer als die Stringlänge

Anmerkung zum Programm

Das C-Programm wurde mit MS Visual C++ als Win32 Konsolenanwendung erzeugt. Es läuft deswegen nur in einem DOS-Fenster unter Windows 95/NT und nicht unter "normalen" 16-Bit Betriebssystemen wie MS-DOS.

Anfang

Quellcode

Inhalt der C-Datei t_strcmp.cpp:
 

/*
   Datei: t_strcmp.cpp

   Testprogramm fuer die Funktionen strcmpnew/strncmpnew.
*/

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

//Header-Datei mit Definition der neuen Funktionen
#include "strcmpn.h"

void main()
{
    puts("Testbench fuer die neuen C-Funktionen\n" \
         "int strcmpnew(const char *str1, const char *str2)\n" \
         "int strncmpnew(const char *str1, const char *str2, size_t n)\n\n");

    puts("\t\t\t\t\t\tstrcmp\t\tstrcmpnew");
    for(int z=0;z<20;z++)
    {
        printf("----");
    }
    getch();

    /***************************************************/
    //Test von strcmpnew
    puts("\nVollstaendiger String-Vergleich (strcmp/strcmpnew)\n");

    char *str1 = "gleich";
    char *str2 = "gleich";

    printf("\nstr1='%s'\t\t\t\t\t   %i\t\t    %i",str1,
                                        strcmp(str1,str2),
                                        strcmpnew(str1,str2));
    printf("\nstr2='%s'\n",str2);
    getch();

    char *str3 = "gleich bis hier, dann verschieden";
    char *str4 = "gleich bis hier, dann ungleich";

    // str3 > str4
    printf("\nstr1='%s'\t   %i\t\t    %i",str3,
                                            strcmp(str3,str4),
                                            strcmpnew(str3,str4));
    printf("\nstr2='%s'\n",str4);
    getch();

    // umgekehrte Reihenfolge (str4 < str 3)
    printf("\nstr1='%s'\t\t   %i\t\t    %i",str4,
                                            strcmp(str4,str3),
                                            strcmpnew(str4,str3));
    printf("\nstr2='%s'\n",str3);
    getch();


    char *str5 = "";
    char *str6 = "";

    // str5 = str6 = ""  (leer)
    printf("\nstr1='%s'\t\t\t\t\t\t   %i\t\t    %i",str5,
                                            strcmp(str5,str6),
                                            strcmpnew(str5,str6));
    printf("\nstr2='%s'\n",str6);
    getch();

    char *str7 = "nicht leer";

    // leerer String - nicht leerer String
    printf("\nstr1='%s'\t\t\t\t\t\t   %i\t\t    %i",str5,
                                            strcmp(str5,str7),
                                            strcmpnew(str5,str7));
    printf("\nstr2='%s'\n",str7);
    getch();

    //umgekehrte Reihenfolge
    printf("\nstr1='%s'\t\t\t\t   %i\t\t    %i",str7,
                                            strcmp(str7,str5),
                                            strcmpnew(str7,str5));
    printf("\nstr2='%s'\n",str5);
    getch();

    /********************************************************/
    //Test von strncmpnew

    puts("\n\t\t\t\t\t\tstrncmp\t\tstrncmpnew");
    for(z=0;z<20;z++)
    {
        printf("----");
    }

    puts("String-Vergleich bis zur n.-ten Stelle\n");
    getch();

    //Vergleich bis zum 22. Zeichen (bis dahin sind beide gleich)
    puts("\nIst str1=str2 bis zur 22. Stelle (..dann ) ?");
    printf("\nstr1='%s'\t   %i\t\t    %i",str3,
                                            strncmp(str3,str4,22),
                                            strncmpnew(str3,str4,22));
    printf("\nstr2='%s'\n",str4);
    puts("n = 22");
    getch();

    //Vergleich bis zu verschiedenem Zeichen
    puts("\n\nIst str1=str2 bis zur 23. Stelle (..dann v bzw. u) ?");
    printf("\nstr1='%s'\t   %i\t\t    %i",str3,
                                            strncmp(str3,str4,23),
                                            strncmpnew(str3,str4,23));
    printf("\nstr2='%s'\n",str4);
    puts("n = 23");
    getch();

    //umgekehrte Reihenfolge
    puts("\n\nIst str1=str2 bis zur 23. Stelle (..dann u bzw. v) ?");
    printf("\nstr1='%s'\t\t   %i\t\t    %i",str4,
                                            strncmp(str4,str3,23),
                                            strncmpnew(str4,str3,23));
    printf("\nstr2='%s'\n",str3);
    puts("n = 23");
    getch();

    //Vergleich von 0 Zeichen
    puts("\n\nIst str1=str2 bis zur 0. Stelle ?");
    printf("\nstr1='%s'\t\t   %i\t\t    %i",str4,
                                            strncmp(str4,str3,0),
                                            strncmpnew(str4,str3,0));
    printf("\nstr2='%s'\n",str3);
    puts("n = 0");
    getch();

    //n grösser als Stringlänge
    puts("\n\nIst str1=str2 bis zur 100. (groesser als Stringlaenge) Stelle ?");
    printf("\nstr1='%s'\t\t   %i\t\t    %i",str4,
                                            strncmp(str4,str3,100),
                                            strncmpnew(str4,str3,100));
    printf("\nstr2='%s'\n",str3);
    puts("n = 100");
    getch();

    puts("\n\nEnde des Tests\n");
    getch();
}

Anfang

Erzeugen der Ausführbaren Datei

Um aus dem Quellcode in t_strcmp.cpp eine ausführbare Datei zu generieren sind folgende Schritte notwendig:

  1. Aufruf der Entwicklungsumgebung von Visual C++
  2. Erzeugen eines neuen Projektes über das Menü "Datei" mit dem Eintrag "Neu". Im sich öffnenden Dialogfenster wird "Win32 Console Application" ausgewählt, das Projekt als "t_strcmp" benannt und das "OK"-Feld betätigt.
  3. Im Menü Projekt wird "Dem Projekt hinzufügen" und in dessen Untermenü der Punkt "Dateien..." ausgewählt.
  4. Es öffnet sich ein Dialogfenster zum Auswählen von Dateien. Zunächst stellt man das Verzeichnis ein, das die Dateien t_strcmp.cpp, strcmpn.h strcmpn.obj und strncmpn.obj enthält, wählt sie alle aus und betätigt das "OK"-Feld.
  5. Im Menü "Erstellen" wird der Unterpunkt "t_strcmp.exe erstellen" ausgewählt. Dadurch wird die ausführbare Datei erzeugt.

Anfang

Ausgabe des Programms

Wenn man in einem DOS-Fenster unter Windows das Programm "t_strcmp.exe" nun aufruft, erhält man folgende Ausgabe:

 
Testbench fuer die neuen C-Funktionen
int strcmpnew(const char *str1, const char *str2)
int strncmpnew(const char *str1, const char *str2, size_t n)


            strcmp    strcmpnew
--------------------------------------------------------------------------------
Vollstaendiger String-Vergleich (strcmp/strcmpnew)


str1='gleich'            0        0
str2='gleich'

str1='gleich bis hier, dann verschieden'     1        1
str2='gleich bis hier, dann ungleich'

str1='gleich bis hier, dann ungleich'      -1       -1
str2='gleich bis hier, dann verschieden'

str1=''              0        0
str2=''

str1=''              -1       -1
str2='nicht leer'

str1='nicht leer'          1        1
str2=''

            strncmp   strncmpnew
--------------------------------------------------------------------------------
String-Vergleich bis zur n.-ten Stelle


Ist str1=str2 bis zur 22. Stelle (..dann ) ?

str1='gleich bis hier, dann verschieden'     0        0
str2='gleich bis hier, dann ungleich'
n = 22


Ist str1=str2 bis zur 23. Stelle (..dann v bzw. u) ?

str1='gleich bis hier, dann verschieden'     1        1
str2='gleich bis hier, dann ungleich'
n = 23


Ist str1=str2 bis zur 23. Stelle (..dann u bzw. v) ?

str1='gleich bis hier, dann ungleich'      -1       -1
str2='gleich bis hier, dann verschieden'
n = 23


Ist str1=str2 bis zur 0. Stelle ?

str1='gleich bis hier, dann ungleich'      0        0
str2='gleich bis hier, dann verschieden'
n = 0


Ist str1=str2 bis zur 100. (groesser als Stringlaenge) Stelle ?

str1='gleich bis hier, dann ungleich'      -1       -1
str2='gleich bis hier, dann verschieden'
n = 100


Ende des Tests

Die zum Test verwendeten Strings wurden so ausgewählt, daß möglichst viele denkbaren Fälle abgedeckt werden. An der Übereinstimmung der Ausgabe der Originalroutinen mit den neu entwickelten kann man ihre Korrektheit erkennen.

Anfang
zu den TGI-SeitenZu den TGI-Seiten der TUM

10.07.98