Zum Inhalt springen

pointer auf array


stigi

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...