Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C-Programming] String naar Struct

Pagina: 1
Acties:

  • Chris89
  • Registratie: Oktober 2005
  • Laatst online: 11:13
Jongens,
Hoe zat het ook alweer.
Ik wil deze string:

code:
1
char  number[] = "00000000/00000000,0.00,00000000/00000000,0.00,0/0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0/0,0/0,0.00,0.00,0,0,0,0,0,0,0,0";

*String word al gesplitst op ',' en op '/'

In deze struct krijgen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct Print{
       int   1;
       int   2;
       float 3;
       float 4;
       float 5; 
       float 6; 
       int   7; 
       int   8; 
       float 9; 
       float 10; 
       float 11; 
       float 12; 
       float 13; 
       float 14; 
       float 15; 
       float 16; 
       int   17; 
       int   18; 
       int   19; 
       int   20; 
       float 21; 
       float 22; 
       int   23; 
       int   24; 
       int   25; 
       int   26; 
       int   27; 
       int   28; 
       int   29; 
       int   30;  
}test;


Heb al het een en ander geprobeerd met loopjes maar krijg alleen het eerste element te pakken...
Weet iemand hoe je via een loop door de elementen van je struct heen kan en deze toe kan wijzen aan je string?

  • Ealanrian
  • Registratie: Februari 2009
  • Laatst online: 13:15
Wat heb je al geprobeerd aan loopjes?

  • Chris89
  • Registratie: Oktober 2005
  • Laatst online: 11:13
code:
1
2
3
4
5
int i;
for(i=0; i < 30; i++)
{
Print.test[i]
}


Zo iets geprobeert

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Als er en vaste volgorde in splitsen op ',' en '/' zit, kun je wellicht strtok gebruiken?

  • Chris89
  • Registratie: Oktober 2005
  • Laatst online: 11:13
Klopt krijg hem wel geprint onder elkaar als ik het volgende doe:
code:
1
2
3
4
5
6
7
8
9
   char* buffer;

   buffer = strtok (number, ",/");

   while (buffer) {
         printf ("%s\n", buffer);
         buffer = strtok (NULL, ",/");
         
}


Maar ik wil hem in een struct hebben en dan zelf kunnen zeggen van ik wil element zoveel printen

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Als je eenmaal een char* hebt, dan kun je dat toch makkelijk omzetten naar een int en deze weer opslaan in de struct, of ben ik nu gek?

  • Cassettebandje
  • Registratie: Juli 2002
  • Laatst online: 21-11 20:56

Cassettebandje

SA-C90 TDK

code:
1
Print.test[i]

en
Maar ik wil hem in een struct hebben en dan zelf kunnen zeggen van ik wil element zoveel printen
C is geen PHP, je kunt een struct niet als array gebruiken. Je zou een union kunnen maken van een int en float, daar een struct {enum die vertelt of een int of float is, die union} omheen. Als je daar een array van maakt kun je ongeveer bereiken wat je wilt.

  • Chris89
  • Registratie: Oktober 2005
  • Laatst online: 11:13
Ehms... Begrijp er nu helemaal niks van...
Dacht dat het gewoon kon dat je je char array gewoon kon toewijzen naar elk element in je struct.

Wil iemand me even op weg helpen?

  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 11:09
Helaas, in c(++) moet je een string omzetten naar int/float etc, je kan niet gewoon een string toewijzen aan een willekeurige andere variabele (je moet functies als atoi en vrienden gebruiken)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22-11 22:46

Creepy

Tactical Espionage Splatterer

Chris89 schreef op dinsdag 03 december 2013 @ 12:24:
Ehms... Begrijp er nu helemaal niks van...
Dacht dat het gewoon kon dat je je char array gewoon kon toewijzen naar elk element in je struct.

Wil iemand me even op weg helpen?
Dus wat heb je nu daadwerkelijk al geprobeerd? Met welke code? En wat ging er dan vervolgens mis. Ik heb het idee dat je een struct als array wilt gebruiken, en dan moet je in C toch echt een array gebruiken. Ik gok erop dat je daadwerkelijk compiler errors e.d. hebt gehad, maar je meld er 0.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:08
Als het invoerformaat helemaal vast staat, is het waarschijnlijk het makkelijkst om gewoon met sscanf() de relevante waarden te parsen:

C:
1
sscanf(string, "%d/%d,%f,%d/%d..etc.", &values.i1, &values.&i2, &values.f3 /* etc. */ );


Da's makkelijker dan expliciet parsen met strtok() en heeft als voordeel dat het bestandsformaat duidelijk uit de code blijkt. Vergeet niet de return value van sscanf() te checken.

[ Voor 7% gewijzigd door Soultaker op 03-12-2013 15:01 ]

Pagina: 1