C++ Meervoudige arrays

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

  • dixon
  • Registratie: Januari 2001
  • Laatst online: 16-08 17:19
Hoe vraag je het aantal rijen in een meervoudige array op? Dus niet hoeveel je er zelf declareert, maar hoeveel er in gebruik zijn... Bij bijvoorbeeld
char test[1][5] =
{
{'T','e','s','t'},
{'B','l','a','a'}
};

kan je met strlen(test[0]) het aantal chars in test[0]opvragen. 4 dus. Ik wil het aantal rijen. 2 dus. Hoe doe ik dit?

Wat een onzin..


Verwijderd

dit is c++, moet je zelf coden !!

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Op dinsdag 16 april 2002 17:23 schreef dixon het volgende:
code:
1
2
3
4
5
char test[1][5] =
 {
  {'T','e','s','t'},
  {'B','l','a','a'}  
 };
Dit gaat niet werken. Je declareert maar 1 rij en je gebruikt er 2.

https://fgheysels.github.io/


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Wat versta je onder "in gebruik zijn". Kunnen er minder rijen "in gebruik zijn" dan je declareert?

He who knows only his own side of the case knows little of that.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

unteraarsch:
dit is c++, moet je zelf coden !!
kan ik me niet voorstellen dat daar geen standaard functies voor zijn...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Lalalalalalala.......

He who knows only his own side of the case knows little of that.


Verwijderd

define een array like:
code:

char varnaam[aantal][aantal] {"aantal"), ("next");
Volgens mij maak je zo een meervoudig array, met tabel idee..maar goed momenteel i'm in luv...dus heb 'm kop er niet helemaal bij.... O+

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Op dinsdag 16 april 2002 17:31 schreef RickN het volgende:

[..]

Idd, en hij kan ook geen strlen gebruiken omdat er geen ruimte is voor de /0
Hoezo? Hij declareert een array van 5 char's en steekt daar een string in van 4 charachters. Dus is er op array[4] nog plaats voor '\0'.

https://fgheysels.github.io/


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op dinsdag 16 april 2002 17:35 schreef whoami het volgende:

[..]

Hoezo? Hij declareert een array van 5 char's en steekt daar een string in van 4 charachters. Dus is er op array[4] nog plaats voor '\0'.
:{

Euh, ja.

He who knows only his own side of the case knows little of that.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

RickN:
:{

Euh, ja.
? sarcastisch of niet? Ik moet het hier toch wel met whoami eens zijn :D

desalniettemin zou het kunnen zijn (ligt aan compiler) dat hij echter niet op '\0' geinit wordt.

* drm begrijpt trouwens nog steeds niet waarom mensen de backslash en forwardslash door elkaar halen

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Ok, back on topic.
Als je gebruik maakt van constanten om de dimensies van uw array te definieren, kun je adhv die constanten dus ook later in uw programma weten hoeveel rijen een array heeft.

Als je wilt weten hoeveel rijen er in gebruik zijn, zul je zelf eens moeten kijken. Je kan uw array op een bepaalde beginwaarde initialiseren en dan gewoon lopen en kijken op hoeveel rijen deze beginwaarde niet meer ingesteld staat.

https://fgheysels.github.io/


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Je voorbeeld is dan niet helemaal goed gekozen lijkt me, je maakt een array met 1 rij en stopt er 2 rijen in en wilt weten hoeveel rijen er in gebruik zijn?
code:
1
2
3
4
char test[3][5] =
{
  {'T','e','s','t'}, {'B','l','a','a'}
};

In dit voorbeeldje zijn er 2 van de 3 rijen in gebruik, jij wilt nu dus uitvinden dat er 2 in gebruik zijn?

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
lees de draad, vooraleer je blaat >:)
van nelske haar sig gepikt

https://fgheysels.github.io/


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

whoami got a problem? heb de draad heus wel gelezen maar de topicstarter maakt twee fouten

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Nee, no prob en je moet je ook niet druk maken.
Op die fout was hij inmiddels al gewezen, en daar doelde ik ook op. (Trouwens, waar zit die 2de fout?)

https://fgheysels.github.io/


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 16 april 2002 17:48 schreef whoami het volgende:
van nelske haar sig gepikt
haar ??

* ACM heeft hem zaterdag gezien...
En er is weinig vrouwelijks aan ;)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

ik maak me niet druk :Y) als je je druk gaat maken over computerforum ... :)

maar goed, de fout dat het voorbeeld niet handig is zie ik nergens terug in deze thread... uitvinden hoeveel elementen in gebruik zijn maar in het voorbeeld de hele array volstoppen... da's gewoon niet slim.

edit:
die functie moet je volgens mij gewoon zelf schrijven door de hele array door te lopen totdat je een lege positie tegenkomt... of je moet continu de index waar je het laatst toegevoegd hebt, onthouden

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Op dinsdag 16 april 2002 17:52 schreef ACM het volgende:

[..]

haar ??

* ACM heeft hem zaterdag gezien...
En er is weinig vrouwelijks aan ;)
Euh, zijn sorry.
Ik dacht al van in het begin dat nelske vrouwelijk was, en alhoewel ik inmiddels beter weet, mis ik toch soms nog een beetje.

https://fgheysels.github.io/


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

whoami:
Ik dacht al van in het begin dat nelske vrouwelijk was, en alhoewel ik inmiddels beter weet, mis ik toch soms nog een beetje.
*snif* ;(
touching

:D
</offtopic>

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 16 april 2002 17:53 schreef whoami het volgende:
Euh, zijn sorry.
Ik dacht al van in het begin dat nelske vrouwelijk was, en alhoewel ik inmiddels beter weet, mis ik toch soms nog een beetje.
LOL :D

  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op dinsdag 16 april 2002 17:40 schreef drm het volgende:

[..]

? sarcastisch of niet? Ik moet het hier toch wel met whoami eens zijn :D
Nee, serieus, zo druk ik uit dat ik met m'n bek vol tanden sta.... ;)
* drm begrijpt trouwens nog steeds niet waarom mensen de backslash en forwardslash door elkaar halen
Dat is een implementatie detail :P

He who knows only his own side of the case knows little of that.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Op dinsdag 16 april 2002 18:02 schreef ACM het volgende:

[..]

LOL :D
Heb wel al opgemerkt dat ik niet de enige ben die deze vergissing soms maakt....

https://fgheysels.github.io/


Verwijderd

Op dinsdag 16 april 2002 17:28 schreef unteraarsch het volgende:
dit is c++, moet je zelf coden !!
Is al voor je gedaan: std::vector :).

edit:

Topicstarter, misschien is vandaag een mooie dag om eens een kijkje te nemen in de wondere wereld van de containers in de C++ Standard Library. std::vector is één van deze containers, die dit soort extra functionaliteit om een intern verzorgde array wrapt.

Voor meer informatie over deze containers en ander speelgoed uit de C++ Standard Library, zoek je met Google op 'C++ Standard Library' of 'C++ Standard Template Library'.

Verwijderd

Op dinsdag 16 april 2002 17:48 schreef whoami het volgende:
lees de draad, vooraleer je blaat >:)
van nelske haar sig gepikt
Zeg schat, dat komt niet uit mijn sig hoor :*

Verwijderd

Op dinsdag 16 april 2002 17:23 schreef dixon het volgende:
Hoe vraag je het aantal rijen in een meervoudige array op? Dus niet hoeveel je er zelf declareert, maar hoeveel er in gebruik zijn... Bij bijvoorbeeld
char test[2][5] =
{
{'T','e','s','t'},
{'B','l','a','a'}
};

kan je met strlen(test[0]) het aantal chars in test[0]opvragen. 4 dus. Ik wil het aantal rijen. 2 dus. Hoe doe ik dit?
'T','e','s','t' gaat segfaulten op strlen() omdat er geen '\0' in de string staat om te terminaten. Ga er nu eens vanuit dat je de lengt van de array wilt, dan doe je dit:
code:
1
sizeof(test)/sizeof(char*)

Dit werkt echter niet als je de lijst NULL-terminated maakt of de lijst langer maakt dan het aantal items (pre-allocaten).

Een andere manier is om de derde item in test NULL te maken en hierop te checken voor de length:
code:
1
2
3
4
5
6
char test[3][5] =
{
  {'T','e','s','t','\0'},
  {'B','l','a','a','\0'},
  NULL
};

In dat geval kun je een soort functie maken als
code:
1
2
3
4
5
6
7
int
array_length (void **array)
{
  unsigned int n = 0;
  while (array[n]) n++;
  return n;
}

Maar de sizeof() methode is waarschijnlijk simpeler.

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Die NULL methode is op zich best effectief. Misschien een toevoeging, want wat als je [0] vult en [2] vult wil je misschien ook 2 terug hebben. Met voorgaande methode vertelt ie 1 :)

Aangezien je weet hoeveel rijen je hebt (constante of een var die je invoert) in bijvoorbeeld variabele ArrRij Het volgende:
code:
1
2
3
4
for (int i(0);i<=ArrRij;i++) {
  if (array[i]) teller++
  //nog meer geblaat code :)
}

Misschien wat ik nog niet snap is waarom je een chararray gebruikt voor een string. Juist string is toegevoegd aan C++ om het leven gemakkelijker te maken :) Of was het bedoelt als praktisch voorbeeld?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:11
Op dinsdag 16 april 2002 19:54 schreef elske het volgende:

[..]

Zeg schat, dat komt niet uit mijn sig hoor :*
Ok, dan zal het waarschijnlijk uit die van Merely (m/v?) komen. 'k Vergis me nogal soms in jullie 2.

https://fgheysels.github.io/


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 16 april 2002 20:22 schreef whoami het volgende:
Merely (m/v?)
Heeft het geloof ik idd wel in gestaan :)

  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
euh, als je je multidimensionale array nou anders declareert ( als char** ) dan is ie veel makkelijker vol te gooien met data, je hoeft de grootte vd array niet hard in je code te gooien, en je voorkomt dit soort problemen omdat je gewoon een strlen kan doen...

Experience has taught me that interest begets expectation, and expectation begets disappointment, so the key to avoiding disappointment is to avoid interest.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-09 00:49
Op dinsdag 16 april 2002 19:55 schreef beelzebubu het volgende:

[ char test[2][5] =
{
{'T','e','s','t'},
{'B','l','a','a'}
}; ]

'T','e','s','t' gaat segfaulten op strlen() omdat er geen '\0' in de string staat om te terminaten.
Oh nee? Wat is test[0][4]?
Goed, gezien de topicstarters kennis van C of C++ is het misschien geluk dat het goed gaat, maar dit is voor ervaren C programmeurs normale code. Missende elementen defaulten naar 0, NULL, 0.0 of '\0'
C++ programmeurs gebruiken natuurlijk vector<string>

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

MSalters:
Missende elementen defaulten naar 0, NULL, 0.0 of '\0'
Ligt er dus maar net aan welke compiler je gebruikt.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Op woensdag 17 april 2002 09:24 schreef MSalters het volgende:
Goed, gezien de topicstarters kennis van C of C++ is het misschien geluk dat het goed gaat, maar dit is voor ervaren C programmeurs normale code. Missende elementen defaulten naar 0, NULL, 0.0 of '\0'
Ervaren coders weten dat dit per platform/compiler/omgeving verschilt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[17 Apr - rbultje@tux /tmp]# cat test.c
#include <string.h>

int main()
{
  int i;
  char test[2][5] = {
                {'t','e','s','t'}
              };

  for (i=0;test[i]!=NULL;i++)
  {
    printf("i=%d, Strlen(): %d, String: \'%s\'\n",
    i, strlen(test[i]), test[i]);
  }

  return 0;
}
[17 Apr - rbultje@tux /tmp]#


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
[17 Apr - rbultje@tux /tmp]# gcc -o test test.c
[17 Apr - rbultje@tux /tmp]# ./test
[.. vele lines omitted ..]
i=367, Strlen(): 16, String: 'home/rbultje/bin'
i=368, Strlen(): 11, String: 'rbultje/bin'
i=369, Strlen(): 6, String: 'je/bin'
i=370, Strlen(): 1, String: 'n'
i=371, Strlen(): 5, String: '/test'
i=372, Strlen(): 0, String: ''
i=373, Strlen(): 2, String: 'st'
i=374, Strlen(): 0, String: ''
Segmentation fault (core dumped)
[17 Apr - rbultje@tux /tmp]#

Dat defaulten naar NULL is dus niet helemaal waar....

Gouden regel voor (goede?) programmeurs: ga nooit uit van het goede van de compiler/gebruiker/omgeving. Altijd zelf initialiseren, alleen dan weet je 100% zeker wat er gaande is. :).

  • dixon
  • Registratie: Januari 2001
  • Laatst online: 16-08 17:19
Oke hier ben ik dan weer.. sorry ik heb een tijdje geen tijd gehad en de reply's niet kunnen lezen. Thnx allemaal voor de reply's (extra dank aan beelzebubu, denk dat dat wel werkt). Ik ga het zo proberen te fixen. Ik ben misschien niet helemaal duidelijk geweest, ik zal iets meer vertellen.

Het programma leest text uit een bestand, en dat wil ik letter voor letter (komma gescheiden bestand). Die worden ook steeds in die meervoudige array geplaatst. Later, wordt met for() { for ()} de hele zooi weer afgedrukt.

Bottom line, ik weet niet hoeveel regels er in het bestand zitten, en wil dit ook niet bijhouden op het moment dat het bestand in word gelezen, maar uit de meervoudige array kunnen ophalen.

Ik weet het ik ben weer lekker vaag, maar als het moet plak ik de source-code wel in een reply voor wie dat wil. Tis niet echt interresant en geen top c++. Tis voor mijn eigen gebruik en gewoon om te testen en ervaring op te doen.

Wat een onzin..


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-09 00:49
Op woensdag 17 april 2002 09:39 schreef drm het volgende:

[..]

Ligt er dus maar net aan welke compiler je gebruikt.
'k Heb met ongeveer de eerste (AT&T) compiler gewerkt, en zelfs die had het al. Een compiler moet wel heel erg broken zijn om het fout te doen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-09 00:49
Op woensdag 17 april 2002 11:24 schreef beelzebubu het volgende:

[..]
Ervaren coders weten dat dit per platform/compiler/omgeving verschilt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[17 Apr - rbultje@tux /tmp]# cat test.c
#include <string.h>

int main()
{
  int i;
  char test[2][5] = {
                {'t','e','s','t'}
              };

  for (i=0;test[i]!=NULL;i++)
  {
    printf("i=%d, Strlen(): %d, String: \'%s\'\n",
    i, strlen(test[i]), test[i]);
  }

  return 0;
}
[17 Apr - rbultje@tux /tmp]#


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
[17 Apr - rbultje@tux /tmp]# gcc -o test test.c
[17 Apr - rbultje@tux /tmp]# ./test
[.. vele lines omitted ..]
i=367, Strlen(): 16, String: 'home/rbultje/bin'
i=368, Strlen(): 11, String: 'rbultje/bin'
i=369, Strlen(): 6, String: 'je/bin'
i=370, Strlen(): 1, String: 'n'
i=371, Strlen(): 5, String: '/test'
i=372, Strlen(): 0, String: ''
i=373, Strlen(): 2, String: 'st'
i=374, Strlen(): 0, String: ''
Segmentation fault (core dumped)
[17 Apr - rbultje@tux /tmp]#

Dat defaulten naar NULL is dus niet helemaal waar....
Dit bewijst dus helemaal niets. Waar wijst test[374] naar toe? test[] bevat in totaal 10 chars, 4 geinitialisseerde en 6 die dus naar char(0) defaulten. Er is geen enkel pointer object in test, dus ook niets dat naar NULL default.
Gouden regel voor (goede?) programmeurs: ga nooit uit van het goede van de compiler/gebruiker/omgeving. Altijd zelf initialiseren, alleen dan weet je 100% zeker wat er gaande is. :).
Gouden regel: Compiler bouwers zijn slimmer dan jij bent. Als zij het beloven te doen, ga er dan van uit dat het gebeurt totdat het tegendeel bewezen is. Zelfs bij MSVC6.

Wat initialiseren betreft heb je wel gelijk; alleen is {0} dus altijd een goede initializer, zelfs als je niet weet welke elementen een class heeft.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1