2 strings vergleichen mit referenz
-
Hi Leute, bin neu hier..
unszwar möchte ich nur ein kleines programm schreiben, dass 2 eingegebene Strings vergleicht und in der funktion vergleiche ein ergebnis ausgibt
hier ist der code
void eingabe (char* z1[], char* z2[]) { cout<<"Zeichenkette 1 = "; cin>>*z1; cout<<"Zeichenkette 2 = "; cin>>*z2; } void vergleiche (char* z1[], char* z2[]) { if(strcmp(*z1,*z2)==0) cout<<"Die Zeichenketten sind identisch!"; else cout<<"Die Zeichenketten sind nicht identisch!"; } int main() { char z1[10], z2[10]; eingabe(&z1[],&z2[]) vergleiche(&z1[],&z2[]); getch(); return 0; }und hier der fehlercode
Fehler E2188 main.cpp 21: Ausdruckssyntax in Funktion main() Warnung W8080 main.cpp 25: 'z2' ist deklariert, wird aber nie verwendet. in Funktion main() Warnung W8080 main.cpp 25: 'z1' ist deklariert, wird aber nie verwendet. in Funktion main()hoffe jemand kann mir weiterhelfen
-
Das geht so nicht so einfach. Da müsstest du die C-Funktionen nutzen, um strings zu vergleichen.
http://www.cplusplus.com/reference/clibrary/cstring/strcmp.htmlAllerdings würde ich zu std::string raten, da man da das ganze auch ganz einfach per = - Operator vergliechen kann.
#include <string> .. std::string s1 = "hallo"; std::string s2 = "hallo"; if ( s1 == s2 ) std::cout << "gleich" << "\n"; else std::cout << "ungleich" << "\n";
-
Hey,
du solltest unbedingt
std::stringnutzen, wenn du schon in C++ programmierst:#include <iostream> #include <string> void eingabe(std::string& s1, std::string& s2) { std::cout << "Zeichenkette 1 = "; std::cin >> s1; std::cout << "Zeichenkette 2 = "; std::cin >> s2; } void vergleiche(const std::string& s1, const std::string& s2) { if (s1 == s2) { std::cout << "Die Zeichenketten sind identisch!" << std::endl; } else { std::cout << "Die Zeichenketten sind nicht identisch!" << std::endl; } } int main() { std::string str1, str2; eingabe(str1, str2); vergleiche(str1, str2); }
-
ok vielen dank das hat nun geklappt,
bin grad am üben etc..wollte nicht nochn Thread erstellen,nun möchte ich mit zeigertechnik das eingegebene Wort in Kleinbuchstaben umwandeln
Es wird nur der erste Buchstabe umgewandelt, allerdings werden danach irgendwelche Zeichen ausgeben.wenn ich mit referenzen arbeite klappt das
hier ist der codevoid eingabe (char* z) { cout<<"Zeichenkette = "; cin>>*z; while(*z!=0) { if(*z>='A' && *z<='Z') *z+=32; cout<<*z; z++; } } int main() { char z; eingabe(&z); return 0; }
-
benutz dafuer doch bspw. std::transform.
#include <string> #include <algorithm> #include <cctype> using std::string; using std::transform; #define tolower ( int(*)(int) ) std::tolower #define toupper ( int(*)(int) ) std::toupper string strToLower( const string &p_str ) { string result( p_str ); transform( result.begin(), result.end(), result.begin(), tolower ); return result; } string strToUpper( const string &p_str ) { string result( p_str ); transform( result.begin(), result.end(), result.begin(), toupper ); return result; }hoffe das klappt so, ist ungetestet ...
sonst google nach den funktionen, cplusplus.com/reference koennte auch helfen."( int()(int) ) std::tolower"
muss sein, weil tolower als funktion in <cctype> und <locale> (iirc) jeweils anders deklariert ist, und man direkt sagen muss, welche der funktionen man haben will.
damit man nicht immer "( int()(int) )" davor schreiben muss, kann man z.b. diese defines nutzen.
dasselbe gilt fuer toupper ...mfg,
julian
-
Corax schrieb:
char z; eingabe(&z);Was du hier tust, führt zu undefiniertem Verhalten, da
znicht initialisiert ist. Da du denchar*als Zeichenkette behandeln willst, solltest du auch eine solche übergeben - also ein statisches oder dynamisches Array vonchar, und nicht einen Zeiger auf einen einzelnenchar. Innerhalb der Funktion erwartest du schliesslich eine Nullterminierung.
-
Lies lieber in einen string ein und kannst du Iteratoren benutzen. Fände ich persönlich ein wenig schöner. Zeiger sind hier nicht angebracht.
Vor allem kannst du C-strings, wie du siehst nicht so intuitiv nutzen.Wenn du dich dennoch mit diesen rumschlagen willst, dann solltest du dich zuerst ein wenig näher damit befassen:
http://www.cplusplus.com/reference/clibrary/cstring/
+ google