stigi Geschrieben 17. März 2006 Geschrieben 17. März 2006 mahlzeit, kurze frage: ich hab nen pointer der auf n char array zeigt char* wort = new char[ maxLength ]; wie kann ich jetzt über den pointer die zeichen die in dem array stehen rückwärts ausgeben? muss ich das über nen pointer auf den pointer machen? wenn ja, wie ? thx im vorraus:uli Zitieren
marcom Geschrieben 17. März 2006 Geschrieben 17. März 2006 Meinst Du sowas? int bla = maxLength -1; while(bla>= 0) { printf("%c", wort[bla--]); } Falls in dem Array Hallo steht würde das ollaH ausgeben. Ist das was Du wolltest? Natürlich kannst Du es auch so machen: statt wort[bla--] *(wort+(bla--)) Zitieren
stigi Geschrieben 17. März 2006 Autor Geschrieben 17. März 2006 ehmm jein. zeichen für zeichen kann ich es schon rückwärts ausgeben, meine aufgabe ist es, es so zu programmieren das ich für die ausgabe nur std::cout << umgedreht << std::endl; brauche. umgedreht ist ein pointer der auf einen anderen pointer zeigt, der wiederum dann auf das array verweist Zitieren
Klotzkopp Geschrieben 17. März 2006 Geschrieben 17. März 2006 Das geht nicht. Wenn du das so ausgeben willst, musst du den Inhalt des Arrays vorher umdrehen. Pointer auf Pointer ist in diesem Zusammenhang totaler Blödsinn. Zitieren
stigi Geschrieben 17. März 2006 Autor Geschrieben 17. März 2006 ok, dat wollt ich ja wissen, also den inhalt vom array einfach in ner schleife umdrehen?! Zitieren
Klotzkopp Geschrieben 17. März 2006 Geschrieben 17. März 2006 Zum Beispiel. Oder std::reverse, wenn du keine Schleifen magst. Zitieren
stigi Geschrieben 20. März 2006 Autor Geschrieben 20. März 2006 wie sieht die syntax aus wenn ich was mit reverse machen möchte ? Zitieren
Klotzkopp Geschrieben 20. März 2006 Geschrieben 20. März 2006 reverse(wort, wort + strlen(wort)); [/code] Du brauchst dafür <algorithm>. Und natürlich <cstring> für strlen. Zitieren
stigi Geschrieben 20. März 2006 Autor Geschrieben 20. März 2006 kannst du mal drüber schaun was da falsch ist ?! ich steig grad einfach nich durch :beagolisc #include <iostream> #include <fstream> #include <algorithm> #include <cstring> int main( int argc, char** argv ) { std::cout << "Programmstart" << std::endl; std::cout << "--------------------------------------------------" << std::endl; std::cout << "Aufgerufen mit " << argc << " Komandozeilenargumenten." << std::endl; int i = 0; char ** p = argv; for( ; i<argc; i++) { std::cout << "Argument " << i << " hat den Text: '" << *p << "'" << std::endl; p++; } if( argc != 2 ) { std::cout << "--------------------------------------------------" << std::endl; std::cout << "Falscher Programmaufruf" << std::endl; return 0; } p = argv; p++; char* filename = *p; std::cout << "Filename " << filename << std::endl; // Datei mit dem Namen filename öffnen std::ifstream file; file.open( filename, std::ios::in ); if( ! file ) { std::cout << "--------------------------------------------------" << std::endl; std::cout << "Konnte Datei '" << filename << "' nicht oeffnen." << std::endl; return 0; } char c; // Datei Buchstabe für Buchstabe durchlesen und Punkte zählen int icount=0; while( file.get( c ) ) { if( c == '.') { icount++; } } // Anzahl der gefundenen Punkte ausgeben std::cout << "--------------------------------------------------" << std::endl; std::cout << "In der geladenen Datei befinden sich " << icount << " Punkte" << std::endl; std::cout << "--------------------------------------------------" << std::endl; file.clear(); file.seekg( 0 ); // Text auf zusammenhängende Zeichen untersuchen std::cout << "--------------------------------------------------" << std::endl; std::cout << "Ausgabe der Zeichen" << std::endl; std::cout << "--------------------------------------------------" << std::endl; int maxLength = 5; char* wort = new char[ maxLength ]; int x = 0; while (file.get( c ) ) { if ( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ) { wort[x] = c; x++; if( x >= maxLength ) { char* newMem = new char[ 2 * maxLength ]; strncpy( newMem, wort, maxLength ); maxLength = 2 * maxLength; delete [] wort; wort = newMem; } } else if( x > 0 ) { wort[x] = 0; std::cout << wort << std::endl; x = 0; } } file.clear(); file.seekg( 0 ); // wort gespiegelt ausgeben (buchstabe fuer buchstabe) std::cout << "--------------------------------------------------" << std::endl; std::cout << "Zeichen rueckwaerts ausgeben (char by char)" << std::endl; std::cout << "--------------------------------------------------" << std::endl; x = 0; while (file.get( c ) ) { if ( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ) { wort[x] = c; x++; } else if (x > 0) { std::cout << std::endl; for ( ; x > 0; x--) { std::cout << wort[x-1]; } x = 0; } } std::cout << std::endl; // wort gespiegelt ausgeben (pointer) std::cout << "--------------------------------------------------" << std::endl; std::cout << "Zeichen rueckwaerts ausgeben (Pointer)" << std::endl; std::cout << "--------------------------------------------------" << std::endl; x = 0; while (file.get( c ) ) { if ( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ) { wort[x] = c; x++; } else if (x > 0) { std::cout << std::endl; for ( ; x > 0; x--) { std::cout << wort[x-1]; } x = 0; } } std::reverse (wort, wort + strlen(wort)); std::cout << wort << std::endl; file.close(); std::cout << "--------------------------------------------------" << std::endl; std::cout << "Programmende" << std::endl; }[/PHP] Zitieren
Klotzkopp Geschrieben 20. März 2006 Geschrieben 20. März 2006 Eine Anmerkung am Rande: Es ist ziemlich unhöflich, einfach den Code hinzuklatschen, ohne irgendeine Fehlerbeschreibung. Du könntest zumindest das auftretende Verhalten beschreiben. Noch besser wäre es, wenn du nicht benötigte Teile aus dem Code entfernt hättest. Das Problem habe ich aber auch so gefunden: strlen ermittelt die Länge des Strings über die Nullterminierung. Du setzt aber nirgendwo eine. Das brauchst du auch nicht, weil du ja immer weißt, wo das Wort aufhört. Der zweite Parameter von reverse muss jedenfalls der Zeiger auf den Wortanfang + Länge des Wortes sein. Du musst entweder die Länge anders ermitteln oder deine Worte nullterminieren. Zitieren
stigi Geschrieben 20. März 2006 Autor Geschrieben 20. März 2006 sorry, wollte nicht unhöflich erscheinen. der fehler lag bei der ausgabe die so aussah: .... -------------------------------------------------- Zeichen rueckwaerts ausgeben (Pointer) -------------------------------------------------- hciltnthcad //das hier is ne vermischung aus 2 worten. dachte und hoffentlich -------------------------------------------------- Programmende danke für deine hilfe, ich werds gleich probieren wie dus gesagt hast Zitieren
stigi Geschrieben 20. März 2006 Autor Geschrieben 20. März 2006 funktioniert leider immernoch nicht, weil ich nich genau weis wie ich das mit dem nullterminieren machen soll, bzw wo es richtig platziert ist. ich habs im moment so: // wort gespiegelt ausgeben (pointer) std::cout << "--------------------------------------------------" << std::endl; std::cout << "Zeichen rueckwaerts ausgeben (Pointer)" << std::endl; std::cout << "--------------------------------------------------" << std::endl; x = 0; while (file.get( c ) ) { if ( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ) { wort[x] = c; x++; } else if (x > 0) { std::cout << std::endl; } } wort[x+1]=0; std::reverse (wort, wort + strlen(wort)); std::cout << wort << std::endl; file.close(); std::cout << "--------------------------------------------------" << std::endl; std::cout << "Programmende" << std::endl; }[/PHP] dadurch entsteht die ausgabe: ...... ----------------------------- Zeichen rueckwaerts ausgeben (Pointer) ----------------------------- d ----------------------------- Programmende das d das ausgegeben wird ist der letzte buchstabe des letzten wortes das eingelesen wurde. wäre nett wenn du mir nochmal helfen könntest:bimei Zitieren
stigi Geschrieben 20. März 2006 Autor Geschrieben 20. März 2006 habs hinbekommen, ich depp hatte vergessen die datei aus der ich einlese "zurückzuspulen" Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.