Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Textzeile splitten

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 <
000
12.06.2005, 21:09 Uhr
~bunghole
Gast


Ich habe eine Textdatei in einen String geladen.
Nun soll dieser String aufgeteilt werden in lauter durch Leerzeichen (' ') getrennte Teile.
Diese entstandenen Teile sollen wiederrum aufgeteilt werden in lauter durch Punkt ('.') getrennte Teile.

Kann mir jemand die Syntax für diese Problem erstellen?

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.06.2005, 21:29 Uhr
Pler
Einer von Vielen
(Operator)


strtok() macht genau das, ist aber nicht ganz einfach anzuwenden.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wcecrt4/html/erlrfstrtokcmawcstok.asp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.06.2005, 21:39 Uhr
Pler
Einer von Vielen
(Operator)



C++:
#include <stdio.h>
#include <string.h>

char trenner[]=" ";  /*wichtig: trenner ist eine Zeichenkette, möglich wäre auch char trenner[]=",:;" oder sowas, dann sind alle drei zeichen trenner, nicht die Folge aller drei! */

int main( void )
{
  char zeile[128], *einzelname;
  int i=0;

  print( "Gib eine Liste von Namen ein, getrennt durch " "\n" );
  gets(zeile);
  einzelnam = strtok( zeile , trenner );
  while( einzelname != NULL )
  {
     printf( "Name: %d : %s\n" , ++i , einzelname );
     einzelname = strtok( NULL , trennzeich );
  }

  return 0;
}


..nicht getestet!
einzelname müsste dann eben in einem feld gespeichert werden, und kann dann anschliessend weiterverarbeitet werden. usw
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.06.2005, 08:42 Uhr
~bunghole
Gast


dankeschön, sehr hilfreich
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.06.2005, 23:01 Uhr
~bunghole
Gast



Zitat von Pler:

einzelname müsste dann eben in einem feld gespeichert werden, und kann dann anschliessend weiterverarbeitet werden. usw


und wie speichere ich einzelname in ein feld? kann mir das jemand bitte erläutern?
Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.06.2005, 07:40 Uhr
Pler
Einer von Vielen
(Operator)


Du hast ja ja den ganzen string im speicher.

Du könntest vielleicht ein Feld anlegen, in dem du viele zeiger speichern kannst.

C++:
char* feld1[1000];
int i;
int anzahl;



Dann machst du statt einem printf, oder zusätzlich; eine zuweisung an dieses feld.

C++:
i = 0;
while( einzelname != NULL )
{
     printf( "Name: %d : %s\n" , ++i , einzelname );
     einzelname = strtok( NULL , trennzeich );
     feld1[i] = einzelname;
     i++;
}
anzahl = i; // oder i - 1 ???



Die Trennzeichen werden ja automatisch durch 0 ersetzt.
Du kopierst hier also keinen Speicher um oder so, sondern speicherst also jeweils nur den Anfang eines gesuchten Teilsstrings in einem Array ab.

Wie gesagt sind die eintelnen Elemente von feld1 jetzt auch wieder Strings und könnten so ausgegeben werden.

C++:
for( i = 0 ; i <= anzahl strings ; i++ )
{
     printf( "%d:\t%s\n" , i , feld[i] );
}



Aber du könntest die einzelstrings in der obrigen schleife auch noch ein weiteres mal mit strtok() duchgehen.

Weis nicht ob diese Lösung optimal ist, funktionieren müsste es auf jeden Fall.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.06.2005, 09:33 Uhr
~bunghole
Gast


Vielen Dank, es klappt!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.07.2005, 14:32 Uhr
~bunghole
Gast



C++:
char* feld1[1000];
int i;
int anzahl;



Wie kann ich dem Feld feld1 eine dynamische Größe geben?
Habe verschiedenes mit malloc versucht, komme aber nicht auf die Lösung!

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: