Strings mit Zeiger vergleichen geschlossen 

Status
Für weitere Antworten geschlossen.

0wN3r

Registered +
Registriert
Dez. 2008
Beiträge
120
hab hier ne hausübung die folgendermaßen lautet: Schreibe eine Funktion, die mit Hilfe von Zeigern einen String str1 mit einem anderen
zweiten String str2 vergleicht.
Ist str1 kleiner als str2 wird -1, ist str1 grösser als str2 wird 1 und bei Gleichheit wird 0 zurückgegeben.
Beachten Sie, dass zwischen Groß- und Kleinschreibung unterschieden wird.(ich frage mich was das mit der länge zu tun hat?!).
Rufe deine Funktion im main mit mehreren Zeichenketten auf.

ich schätze er meint man soll so ne art passwortkontrolle versuchen...

nun hab ichs mal versucht, aber mein programm stürtzt ab, zeigt aber keine fehler oder warnungen an.

wir haben erst zeiger gelernt und ich kann das noch nich so

Code:
/******************************************/
/* Beschreibung: Diese Programm vergleicht*/
/* die Länge zweier Strings */
/******************************************/
#include 
#include 

int strcmp(char [], char []);

void main()
{
char zk1[] = "Hallo, wie gehts?"; 
char zk2[] = "Gruess dich, wie gehts?"; 
char *p; 
char *p2; 
int erg = 0; 

p = &zk1[0]; 
p2 = &zk2[0]; 

erg = strcmp(zk1, zk2); 
printf("Ergebnis: %d", erg); 

}
/* Diese Funktion vergleicht die Laenge zweier Strings. */
int strcmp(char zk1[], char zk2[])
{
char *p = 0; 
char *p2 = 0; 
int laenge1 = 0; 
int laenge2 = 0; 

while(zk1[*p] != '\0') 
{
p++;
laenge1++;
}

while(zk2[*p2] != '\0') 
{
p2++;
laenge2++;
}

if(laenge1 < laenge2) // Wenn String1 kleiner als String2
return -1; 

else if(laenge1 > laenge2) // Wenn String1 groesser als String2
return 1; 

else // Gleich gross
return 0; 
}

/* Programmabsturz */

würd mich freuen wenn mir einer helfen kann und mir ein paar tips geben kann...
 
hast dus mal mit dem debugger versucht. oft hilft der die ursache des absturzes zu identifizieren.
 
ja, wolllt ich noch dazu sagen

wir arbeiten in der schule mit visual c++ 6.0 und in der schule funktionierts debuggen einwandfrei (auch wenns ichs noch nicht so beherrsche), doch auf meinem lenovo netbook kommen die ganze zeit solche fehlermeldungen er habe in etlichen .dll datein keine entsprechenden symbolinformationen gefunden und auf meinem stand pc funzt das alte programm wieder nicht wegen vista, is alles ein bisschen blöd... hab nun auf meinem stand pc dev-C++ installiert, das eigenlicht geht, aber damit kapier ichs debuggen nicht...

und wenn ihr mir bezüglich setzten von haltepunkten noch ein paar tips geben würdet, wär ich sehr dankbar

lg
 
Schau Dir bitte in nem Buch nochmal ein Kapitel über Zeiger in C an. Ich habe das Gefühl, dass Du in strcmp() nicht genau weißt, was du tust ;-)

Code:
#include 

int strcmp(char [], char []);

int main(int argc, char *argv[])
{

char zk1[] = "Hallo, wie gehts?";
char zk2[] = "Hallo, wie gehts?"; //"Gruess dich, wie gehts?";
char *p;
char *p2;
int erg = 0;

p = &zk1[0];
p2 = &zk2[0];

erg = strcmp(zk1, zk2);
printf("Ergebnis: %d", erg);

}





/* Diese Funktion vergleicht die Laenge zweier Strings. */
int strcmp(char zk1[], char zk2[])
{

char *p = zk1;
char *p2 = zk2;
int laenge1 = 0;
int laenge2 = 0;


while(*p != '\0')
{
p++;
laenge1++;
}

while(*p2 != '\0')
{
p2++;
laenge2++;
}

if(laenge1 < laenge2) // Wenn String1 kleiner als String2
return -1;

else if(laenge1 > laenge2) // Wenn String1 groesser als String2
return 1;

else // Gleich gross
return 0;
}


by the way: sollte strcmp nicht die Zeichenketten *inhaltlich* vergleichen??
 
Zuletzt bearbeitet von einem Moderator:
ja werd ich machen, muss jetzt eh noch viel üben...

danke mal für das programm

ja ich weiß nicht, die aufgabenstellung lautet genauso wie oben, nur hat er schon gesagt das wir jedes einzelne zeichen miteinander vergleichen sollen, aber ich frag mich was das mit der länge zu tun hat...

lg

so ähnlich dürfte das mit dem Zeichen für Zeichen vergleichen gemeint sein:
Code:
#include 
#include 

int strcmp(char [], char []); // Prototyp

int main()
{
char feld1[] = "hallo"; // Feld1.
char feld2[] = "halloo"; // Feld2.
char *p1 = feld1; // Zeiger auf Feld1.
char *p2 = feld2; // Zeiger auf Feld2.

printf("%d\n", strcmp( feld1, feld2)); //Funktionsaufruf.

system("PAUSE");
return 0;
}

/* Diese Funktion kontrolliert die Gleichheit zweier Strings*/
int strcmp(char f1[], char f2[])
{
char *z1 = f1; // Zeiger auf Feld1.
char *z2 = f2; // Zeiger auf Feld2.

while(*z1 != '\0' || *z2 != '\0') // Bis ein String zuende
{
if(*z1 != *z2) // Wenn Zeichen nicht gleich
return -1; // -1 zurueckgeben.

++z2; // Adresse erhoehen.
++z1; // Adresse erhoehen.

}

return 1; // Wenn gleich, 1 zurueckgeben.

}

oder?
 
Zuletzt bearbeitet von einem Moderator:
ja, so sieht das schon ganz brauchbar aus. Allerdings wird die Länge so überhaupt nicht mehr ausgewertet wie in der Aufgabenstellung gefordert. Eventuell mal beide Versionen abgeben und fragen, wie genau das gemeint war.
 
jepp, genau das hab ich vor, danke nochmal


thread kann dann geschlossen werden


mfg
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

M
Antworten
2
Aufrufe
2K
M
Zurück
Oben Unten