Veröffentlicht 17. März 200619 j 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
17. März 200619 j 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--))
17. März 200619 j 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
17. März 200619 j 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.
17. März 200619 j ok, dat wollt ich ja wissen, also den inhalt vom array einfach in ner schleife umdrehen?!
20. März 200619 j reverse(wort, wort + strlen(wort)); [/code] Du brauchst dafür <algorithm>. Und natürlich <cstring> für strlen.
20. März 200619 j 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]
20. März 200619 j 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.
20. März 200619 j 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
20. März 200619 j 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
20. März 200619 j habs hinbekommen, ich depp hatte vergessen die datei aus der ich einlese "zurückzuspulen"
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.