Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [C] Strin nach einer bestimmen Anzahl von Zeichen zerlegen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
06.10.2004, 00:03 Uhr
~Fox
Gast


Hi!
Also ich möchte einen String nach einer Anzahl von Zeichen zerlegen (in 2 Teile) oder abschneiden.

Ich hab's schon mit dem hier probiert:

Code:
text [16] = '\0';


Wenn ich nun diese Operation ausführe, liefert die Funktion den Maximalwert von long long int zurück:

Code:
zahl = strtoull (text, NULL, 16);


Dieser Post wurde am 06.10.2004 um 00:10 Uhr von Fox editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.10.2004, 00:24 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was genau ist jetzt dein problem? das du noch den zweiten teil vom string brauchst?

C++:
char *p=text+17;


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.10.2004, 10:25 Uhr
virtual
Sexiest Bit alive
(Operator)


@Fox
Bitte lese die Doku zu strtoull; zumindestens bei mir steht drin, in welchen Fällen strtoull den Maximalwert zurückliefert.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.10.2004, 10:25 Uhr
~Fox
Gast


Ich habe einen String text ich möchte ihn nach dem Zeichen mit der Nummer n abschneiden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.10.2004, 10:28 Uhr
~Fox
Gast



Zitat von virtual:
@Fox
Bitte lese die Doku zu strtoull; zumindestens bei mir steht drin, in welchen Fällen strtoull den Maximalwert zurückliefert.

Ja das steht in der Manpage. Aber warum gibt es denn nicht die Zahl, sondern den Maximalwert zurück? Zerlege ich den String falsch?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.10.2004, 10:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Es steht in der Manpage: Der Maximalwert wird zurückgeliefert, wenn der String einen Wert repräsentiert, der größer ist als der Wertebereich von long long erlaubt.

Ob Du deinen String richtig zerlegst weiß nur Goitt und du selbst. Und selbst das ist nicht sicher: woher soll ich denn deiner Meinung nach wissen, ob du den String richtig zerlegst?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.10.2004, 13:12 Uhr
~Fox
Gast


OK hab den Fehler gefunden. Ich hab 64 anstatt 16 Hex Zeichen eingelesen.

Aber ich splitte den String per "\0" nach dem 16. Zeichen. Ich möchte aber den String nachdem Zeichen 16 noch behalten. Wie soll ich das anstellen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.10.2004, 15:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


so wie ichs gepostet habe... einfach ein char-pointer aufs zeichen setzen hinter dem wo du mit null terminiert hast....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.10.2004, 15:06 Uhr
0xdeadbeef
Gott
(Operator)


Dann ist trotzdem das 17 Zeichen weg. Am einfachsten wärs wohl so:

C++:
char text[128],
     anfang[17],
     ende[122];

/* ... in text einlesen ... */

strncpy(anfang, text, 16);
anfang[16] = '\0';
strncpy(ende, text, 121);


Ansonsten kannste natürlich irgendwelche wilden Optimierungsmoves ziehen mit

C++:
char text[128];
     tmp,
    *ende = &text[16];

/* ... */

tmp = text[16];
text[16] = '\0';

/* ... mit dem Anfang arbeiten */

text[16] = tmp;

/* ... mit ende arbeiten */


Aber das ist reichlich unübersichtlich.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.10.2004, 15:10 Uhr
Tommix



@Windalf:
Da ist das Zeichen, das er mit der 0 überschrieben hat, aber weg.
@Fox:
Du wirst um eine Kopie des Strings wohl nicht herumkommen - oder Du merkst Dir das überschieben Zeichen und setzt es am Ende wieder zurück:

C++:
char merker = text [16];
text[16] = 0;
zahl = strtoull (text, NULL, 16);
text[16] = merker;



- Tommix


Bearbeitung:

Zu langsam...


Dieser Post wurde am 06.10.2004 um 15:11 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: