Jeg skulle måske have beskrevet lidt nærmere hvad det er jeg prøver at
lave!!!
Det er meningen at jeg skal konstruere en symbol table til en linux
compiler, uden brug af eksisterende c++ funktioner (dvs. lave det hele
selv, fra bunden) - meningen med arrayet er, at det skal være på 100
linier og 3 kolonner - deraf: array[100][3] - således at man i de tre
kolonner har navn, token og type (repræsenteret som string) - og man så
kan sætte værdier ind efterhånden som lexical analyser, syntax analyzer
og semantic analyzer finder dem, deraf:
> >array[i][0]=name;
> > array[i][1]=token;
> > array[i][2]=type;
Det er muligt at jeg ikke bruger array på den rigtige måde - jeg er vant
til at bruge borland builder, og så bare lave en ODBC til en Access
database eller lignende!
"Kristian Dupont" <kristian_SPAMMENOT@chrylers.com> skrev i en
meddelelse news:c0ijiq$9dq$1@news.cybercity.dk...
> > void insertName(string array[], string name, string token, string
type)
> > {
> > int i;
> >
> > while(array[i][0] != 0)
> > i++;
> >
> > array[i][0]=name;
> > array[i][1]=token;
> > array[i][2]=type;
> > }
>
> Din variabel i bliver ikke initialiseret her og har derfor en
udefineret
> værdi. Hvis denne kode virker er det sandsynligvis fordi du kører en
debug
> configuration, der sørger for at nye variable nulstilles.
> Derudover ser det ud til at du har et array af strenge, array, som du
vil
> indsætte tre strenge ind i pr. plads. Med mindre name, token og type
alle er
> præcist ét tegn lange, tror jeg ikke du opnår dét, du vil her. Det er
> selvfølgelig forudsat at string typen opfører sig som ekesmpelvis c++
> standardens string. Er det denne, du bruger?
>
>
> > int findName(string name, string array[])
> > {
> > string tempName;
> > int i;
> >
> > while(name != tempName)
> > {
> > for(i=0;i<100;i++)
> > {
> > tempName = array[i][0];
> > if(name == tempName)
> > return i;
> > }
> > }
> > return 0;
> > }
>
> Igen ser det ud til at du blander strenge og tegnene i strengene lidt
> sammen. Hvorfor indekserer du array[i][0] ? Det sidste [0] vil
sandsynligvis
> give dig det første tegn i den givne streng. Dertil kommer at du har
en
> while løkke der indkapsler for løkken og som, i fald for løkken ikke
finder
> den søgte streng, vil fortsætte i det uendelige.
>
> Jeg går ud fra at du bruger c++, da din fejlmeddelelse siger [C++
Error].
> Hvis det er tilfældet, så er alt det, du er ved at konstruere allerede
> implementeret for dig.
> Pas på med at bruge arrays, og pas især på med at bruge arrays af
udefineret
> størrelse (x[]). Brug eksempelvis en vector i stedet.
> Her er et eksempel på noget lignende det, jeg fornemmer du vil lave:
> (uafprøvet, så der er muligvis fejl og mangler)
>
> #include <vector>
> #include <string>
> #include <algorithm>
>
> using namespace std;
>
> int main(...)
> {
> vector<string> sv;
>
> // Indsæt et par strenge...
> sv.push_back("hej");
> sv.push_back("med");
> sv.push_back("dig");
>
> // Find en given streng
> int dig_pos = find(sv.begin, sv.end(), "dig") - sv.begin();
>
> cout << "Teksten 'dig' blev fundet som streng nummer " << dig_pos
<< " i
> sv." << endl;
> }
>
> Med venlig hilsen
> Kristian Dupont
>
>