Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

pointer auf array

Empfohlene Antworten

Veröffentlicht

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

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

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

ok, dat wollt ich ja wissen, also den inhalt vom array einfach in ner schleife umdrehen?!

wie sieht die syntax aus wenn ich was mit reverse machen möchte ?

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]

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.

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

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.