Hilfe finde den Fehler nicht Funktion mit Bool
-
Hallo,

nach mehrstündiger Fehlersuche finde ich den Fehler in mein immerhin 1. selbstgeschriebenen Programm nichtFür eine Hausarbeit sollen 2 Strings über eine eigen zu schreibende Funktion miteinander verglichen werden.
Wer rettet mich aus meiner Verzweiflung?

Danke#include <iostream.h>
#include <string.h>
#include <stdio.h>
using namespace std;bool funk (char* string1, char* string2);
void main ()
{
char* string1= ("Asterix und Obelix");
char* string2= ("Asterix und Obelix");
bool Ergebnis;Ergebnis = funk (string1, string2);
if (Ergebnis == true)
{
cout <<"die Eingaben sind gleich" <<endl;
cout <<Ergebnis <<endl;
}
else
{
cout <<"die Eingaben sind ungleich" <<endl;
cout <<Ergebnis <<endl;
}
}bool funk (char* string1, char* string2)
{
if (string1==string2)
{
return true;
}
else
{
return false;
}
}
-
Variante C/C++
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; bool funk(char* string1, char* string2); void main() { char* string1 = ("Asterix und Obelix"); char* string2 = ("Asterix und Obelix"); bool Ergebnis; Ergebnis = funk(string1, string2); if (Ergebnis == true) { cout << "die Eingaben sind gleich" << endl; cout << Ergebnis << endl; } else { cout << "die Eingaben sind ungleich" << endl; cout << Ergebnis << endl; } } bool funk(char* string1, char* string2) { if (strcmp(string1, string2) == 0) { return true; } else { return false; } }
-
Es muss int main heissen und nicht void main ^^. und es muss #include <iostream> heissen.
-
Variante C++
#include <iostream> #include <string> using namespace std; bool funk(const string& string1, const string& string2); int main() { string string1 = ("Asterix und Obelix"); string string2 = ("Asterix und Obelix"); if (funk(string1, string2)) { cout << "die Eingaben sind gleich" << endl; } else { cout << "die Eingaben sind ungleich" << endl; } } bool funk(const string& string1, const string& string2) { return (string1 == string2); }
-
Danke für Deine Hilfe, aber die Benutzung der Funktion STRCMP ist mir zur Lösung der Aufgabe der nicht erlaubt. Es soll eine eigene Funktion geschrieben werden. Hättest Du hierfür auch noch einen Vorschlag?

-
bool gleichheit(string s1, string s2) { if(s1==s2) return true; else return false; }zu deinem Programm:
Erstmal solltest du Codetags verwenden.
#include <iostream.h>//aktuell heissen die Header <iostream>, also ohne .h #include <string.h> //für c++ Strings ebenfalls ohne h #include <stdio.h> using namespace std; bool funk (char* string1, char* string2); //ich persönlich mag char arrays nicht, aber wie man sie vergleicht steht ja bei redhead void main () { char* string1= ("Asterix und Obelix"); char* string2= ("Asterix und Obelix"); bool Ergebnis; Ergebnis = funk (string1, string2);//ein besserer name für funk wäre nicht schlecht .. if (Ergebnis == true) // unschön. Besser: if(Ergebnis) oder if(funk(string1, string2)) Aber Geschmackssache { cout <<"die Eingaben sind gleich" <<endl; cout <<Ergebnis <<endl; } else { cout <<"die Eingaben sind ungleich" <<endl; cout <<Ergebnis <<endl; } } bool funk (char* string1, char* string2) { if (string1==string2) // hier vergleichst du zwei Zeiger, die _immer_ verschieden sind. Siehe Redhead oder nimm C++ Strings. { return true; } else { return false; } }
-
Danke für Deine Hilfe, aber die Benutzung der Funktion STRCMP ist mir zur Lösung der Aufgabe der nicht erlaubt. Es soll eine eigene Funktion geschrieben werden. Hättest Du hierfür auch noch einen Vorschlag?

-
Ist dir die Benutzung von std::string auch verboten

-
Wenn du beispielsweise VC6 verwenden würdest könntest du dir die Implementierung
von strcmp() in der Datei strcmp.c anschauen. Dort würdest du dann folgendes finden:/*** *strcmp - compare two strings, returning less than, equal to, or greater than * *Purpose: * STRCMP compares two strings and returns an integer * to indicate whether the first is less than the second, the two are * equal, or whether the first is greater than the second. * * Comparison is done byte by byte on an UNSIGNED basis, which is to * say that Null (0) is less than any other character (1-255). * *Entry: * const char * src - string for left-hand side of comparison * const char * dst - string for right-hand side of comparison * *Exit: * returns -1 if src < dst * returns 0 if src == dst * returns +1 if src > dst * *Exceptions: * *******************************************************************************/ int __cdecl strcmp ( const char * src, const char * dst ) { int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst; if ( ret < 0 ) ret = -1 ; else if ( ret > 0 ) ret = 1 ; return( ret ); }

-
Also eigentlich sollen wir nur mit #include <iostream> arbeiten - es geht unserem Dozenten wohl darum, dass wir eine Funktion selbst schreiben und Schleifen anwenden.
Funktion mit 2 Strings auf Gleichheit prüfen und im Falle von Gleichheit ein True und Ungleichheit ein False ausgeben.
danach sollen wir die gleiche Aufgabe mit einer While -Schleife lösen.
Danke & Viele Grüße

-
Müssen es char arrays sein?
-
for(int i=0;s1[i]!=0;++i) if(s1[i]!=s2[i]) return false; return s2[i]==0;Entspricht das den Bedingungen deiner Aufgabe?