[C/C++] Char Strings miteinander vergleichen

daemon777

Lt. Commander
Registriert
Dez. 2003
Beiträge
1.371
Hi,

Ich hab ein Problem und zwar muss ich zwei Char Strings miteinander vergleichen ( also ein C string) allerdings weiß ich nicht wie ich das mache. ( Um dieses Problem habe ich mich immer herum geschummelt, geht diesmal aber leider nicht :( )

Währe nett wenn ihr mir da helfen könntet :D
 
Also du meinst ein char[] (Array)?
Das kannst du doch einfach vergleichen indem du in einer Schleife alle Stellen der beiden Arrays vergleichst. :)
 
Hab ich auch schon probiert aber egal was ich mache: es kommt keine übereinstimmung zustande.

Das eine Array kommt aus nem ifstream und der andere wird über Tastatur eingelesen ( cin ). Vielleicht liegt das irgendwie daran ? Ich wüsste nicht was es noch sein könnte.
 
Vielleicht hängt an einem der beiden Streams auch ein [CR] oder so was. Caste mal beide Streams (Zeichenweise) nach int, und gib dann beide aus. Vielleicht kommst du dem Übeltäter so auf die Spur. :)

Ansonsten poste mal den code.
 
Da kann ich Green Mamba nur zustimmen:

char [] meinarray

ist ja ansprechbar, genau, wie auch das Vergleichsarray.


if (meinarray[1]==deinarray[1]) then
{
buchstabe = true; //ein Bool Wert
}

wenn Du das dann auf die gesamte Zeichenlänge nimmst, kannst Du mit einer while/for-Schleife arbeiten:

int i = 0;
while(meinarray!="") //schlagt mich nicht - ich mache das unter C# mit einer length-Auswertung
{
if (meinarray==deinarray) then
{
buchstabe = true; //ein Bool Wert
}
i++;
}

if (buchstabe==true)
{
cout << "Die Teilchen sind identisch";
}

Grüße
DanGermany
 
Danke an Alle :bussi:

Das mit strcmp hat bsetens funktioniert :schluck:

Trotzdem ist es mir ein Rätsel warum die Schleife keine übereinstimmung gebracht hat.
Aber egal. So funktioniert es und ich spare auch noch an Code :)
 
hab mal schnell eine kleine funktion geschrieben, viellecht hilft sie dir ja weiter!

#include <stdio.h>

// returns 0 when the two string matches, otherwise the difference of the first non matching characters
int cmp (const char* pFirst, const char* pSecond)
{
int index = 0;
while (*(++pFirst) == *(++pSecond) && *pFirst != '\0' && pSecond != '\0');

return *pFirst - *pSecond;
}

int main(int argc, char* argv[])
{
char a[24] = "asdf\0";
char b[24] = "asdf\0";

if (cmp (a, b) == 0)
printf ("string match");
else
printf ("string don't match");

return 0;
}




rgds
k7m
 
k7m schrieb:
int cmp (const char* pFirst, const char* pSecond)
{
int index = 0;
while (*(++pFirst) == *(++pSecond) && *pFirst != '\0' && pSecond != '\0');

return *pFirst - *pSecond;
}

also damit ist enorme vorsicht geboten, wenn man aus welchen gründen auch immer strcmp() nicht verwenden möchte. da du pre-increment benutzt werden leider die ersten beiden zeichen nicht miteinander verglichen also besser post-inc. benutzen.
 
Zuletzt bearbeitet:
Besser als strcmp() ist strncmp().
Letzeres nimmt noch einen zusätzlichen Parameter, der die maximale Anzahl zu vergleichender Zeichen angibt.
So kann vermieden werden, dass über das Stringende hinaus verglichen wird, wenn mal das abschließende '\0' fehlt. Oder wenn man nur mal die ersten x Zeichen vergleichen will.

http://unixhelp.ed.ac.uk/CGI/man-cgi?strncmp+3
 
Mit strncmp() funktioniert jetzt alles problemlos. Danke noch mal :D
 
Zurück
Oben