Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Zeiger

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
john
Gast





BeitragVerfasst am: 24. Feb 2003 15:51   Titel: Zeiger

Hallo,

sagen wir mal ich möchte das erste Wort eines Strings ermitteln.

#include <stdio.h>

#define MAX 64

main ()
{
char str[MAX] = "Hello World";
char wort[MAX];
char *p, *bla;
p = str;
bla = wort;
while (*p && *p != ' ')
{
*bla++ = *p;
*p++;
}
*bla++ = 0;
printf ("das erste Wort: %s
", wort);
}

Wäre doch eine Möglichkeit?
Ich finde dies aber ein wenig umständlich.
Wie speicher ich nun in *bla alles bis
zum ersten Leerzeichen (' ') ab? Ich möchte es am Ende ungefähr so ausgeben:
printf("erste Wort = %s
", bla);
Es soll nicht erst ein Zeiger auf wort[MAX] gesetzt werden. Geht das?
Und wenn ja, wie? Über ein Beispiel wäre ich sehr
dankbar.

john
 

Tom
Gast





BeitragVerfasst am: 24. Feb 2003 16:01   Titel: Re: Zeiger

vielleicht mit strtok
 

john
Gast





BeitragVerfasst am: 24. Feb 2003 16:09   Titel: Re: Zeiger

eigentlich wollte ich wissen ob ich die Sache mit dem Zeiger richtig sehen!?

klar würde es mit strtok() gehen, nur meine Frage war anders
Trotzdem danke für die Antwort.
 

rattengift
Gast





BeitragVerfasst am: 24. Feb 2003 16:22   Titel: Re: Zeiger

also du willst es "zur übung" von hand programmieren, richtig? anstatt die pointer zu inkrementieren kannst du einen index verwenden:
code:
#include <stdio.h>
#define MAX 64

main ()
{
char str[MAX] = "Hello World";
char wort[MAX];
int j = 0;

while (str[j] != ' ')
wort[j] = str[j++];

wort [j] = '\0';
printf ("das erste Wort: %s ", wort);
}

 

rattengift
Gast





BeitragVerfasst am: 24. Feb 2003 16:35   Titel: Re: Zeiger

oder wenn du eben doch mit pointern rechnen willst, müsste das in etwa so gehen:
code:
...
main ()
{
char str[MAX] = "Hello World";
char wort[MAX];

while (*str != ' ')
*wort++ = *str++;

*wort = '\0';
printf ("das erste Wort: %s ", wort);
}

die while-loop kann man (wenn man will) auch noch kompakter formulieren: while ((*wort++ = *str++) != ' ');
 

rattengift
Gast





BeitragVerfasst am: 24. Feb 2003 16:48   Titel: Re: Zeiger

oops, das 2te bsp geht so natürlich nicht, da die referenz auf den wortanfang verloren geht (die muss man sich natürlich merken, wie du es auch gemacht hast).
ausserdem sollte in beiden beispielen in die while-bedingung die prüfung auf 0 (die du ja richtig verwendet hast) auch noch mit rein.
naja, ich denk das prinzip ist jedenfalls klargeworden.
 

Udo Kanter
Gast





BeitragVerfasst am: 24. Feb 2003 20:44   Titel: Re: Zeiger

Prinzip ist klar.

6 Zeilen Code und 2 Segfaults. C ist echt geil.
 

rattengift
Gast





BeitragVerfasst am: 24. Feb 2003 22:33   Titel: Re: Zeiger

hey, nett dass du meine bugs C in die schuhe schiebst anstatt mir.
ich bin zwar auch kein c-fan bin, aber hier war wohl nicht C schuld. wenn man einen string zeichenweise liest, sollte man eben die stringgrenze/länge berücksichtigen, nicht nur in C. allerdings hatte john diesen teil ja sowieso schon richtig.
die 2.variante ist allerdings totaler müll -- bitte löschen/ignorieren
 

Tom
Gast





BeitragVerfasst am: 25. Feb 2003 14:14   Titel: Re: Zeiger

Sorry john,

da habe ich wohl ein wenig flüchtig gelesen. Ansonsten sieht das mit deinen zeigern doch gut aus. Vielleicht noch :
char wort[MAX] ="";

Anonsten trotzdem noch mal der Wink auf strtok , zumal man damit recht gut mehrere (Trenn)zeichen abfragen kann.
Gruss
Tom
 

Udo Kanter
Gast





BeitragVerfasst am: 26. Feb 2003 14:10   Titel: Re: Zeiger

Ich hatte keinesfalls vor, Fehler in irgendwelche Schuhe zu schieben. Dann wären meine (Schuhe) nämlich ziemlich voll.

Aber an diesen kleinen Beispielen wird jedoch klar, dass C keine Anfängersprache ist.
 

john
Gast





BeitragVerfasst am: 05. März 2003 10:01   Titel: Re: Zeiger

Erstmal: Danke!!!

Aber da habe ich noch zwei Frage:

char str[MAX] = "Hello World";
char wort[MAX];

kann ich nun auch das erste Wort ermitteln ohne char wort[MAX] zu verwenden?
Der Anfang von str[MAX] bis zum ersten ' ' soll in *p abgelegt werden.
Ich hoffe ihr versteht was ich meine! Und wie ist es eigentlich wenn ich einen Text parse.
Ich weiß ja nicht wie lang die einzelnen "Stücke" sind.

z. B.

haus-baum:2

soll nun in "haus", "baum", und "2" zerlegt werden (ohne strtok etc.).

nun könnte auch eine Zeile

Einsehrlangeswort-Nochmaleinsehrsehrlangeswort:1337

heißen.

die Vars in welchen die einzelnen Teile liegen müssten dynamisch sein?! Wie stell ich das an???

john
 

rattengift
Gast





BeitragVerfasst am: 05. März 2003 18:53   Titel: Re: Zeiger

> kann ich nun auch das erste Wort ermitteln ohne char wort[MAX] zu verwenden? Der Anfang von str[MAX] bis zum ersten ' ' soll in *p abgelegt werden.
> Ich hoffe ihr versteht was ich meine!

also ich verstehs jedenfalls nicht.

> Und wie ist es eigentlich wenn ich einen Text parse. Ich weiß ja nicht wie lang die einzelnen "Stücke" sind.
> die Vars in welchen die einzelnen Teile liegen müssten dynamisch sein?! Wie stell ich das an???

du musst mit malloc arbeiten (ist in deinem c-buch sicher erklärt).
da du auch nicht weisst, wie viele wörter kommen werden, kannst du auch keinen wort-array mit einer festen zahl von elementen verwenden. stattdessen könntest du eine "linked list" verwenden (eine gute übung für die programmierung mit pointern. ob diese lösung effektiv ist, hängt davon ab, was du mit der wort-liste machen willst. um zb ein bestimmtes wort darin zu suchen, ist sie nicht effektiv, da gibt es geeignetere datenstrukturen (die aber auch komplexer sind)).
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy