Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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--))

Geschrieben

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

Geschrieben

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]

Geschrieben

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.

Geschrieben

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

Geschrieben

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

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...