Toon posts:

[C++] Check of woord voorkomt in een string

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

Verwijderd

Topicstarter
Als uber c++ beginner heb ik een vraag. Ik ben namelijk bezig met een c++ (console) proggie die ik wil gebruiken om mijn FileZilla Serverlogs te 'versimpelen'. Normaal gesproken ziet zo'n log er als volgt uit:
(000003) 26-4-2005 10:46:58 - kangoo (ipadres)> PASV
(000003) 26-4-2005 10:46:58 - kangoo (ipadres)> 227 Entering Passive Mode (ipadres)
(000003) 26-4-2005 10:46:58 - kangoo (ipadres)> SIZE 01 - There's always Sunday.mp3
(000003) 26-4-2005 10:46:58 - kangoo (ipadres)> 213 3983729
(000003) 26-4-2005 10:46:58 - kangoo (ipadres)> RETR 01 - There's always Sunday.mp3
(000003) 26-4-2005 10:46:58 - kangoo (ipadres)> 150 Connection accepted
Nu heb ik eigenlijk alleen maar iets aan de regel waarin het woordje RETR voorkomt. Dit is eigenlijk ook wat mijn proggie moet doen: een nieuw bestandje maken met alle regels waarin RETR in voorkomt.

Door het lezen van tutorials enzo ben ik tot het volgende gekomen:
C++:
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
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std ;

void verwerkBestandPerRegel(char bestandsNaam[])
{
    ifstream invoer(bestandsNaam);
    int rowNumber = 0;
    char regel[1000];
    
    while(invoer)
    {
        invoer.getline(regel, 1000);
        int regelLengte = strlen(regel);
        // en hier dan iest waar moet staan of het woord RETR voorkomt

    }
    invoer.close() ;
}

void main()
{
    cout    << "FileZilla Server logfile parser\n"
            << "-------------------------------\n";

    verwerkBestandPerRegel("FileZillaServer.log");
}

Kan iemand mij een beetje op weg helpen met wat ik nu moet gaan doen? Hoe kan ik van een regel met allerlei 'woorden' aparte woorden krijgen? Het wegschrijven naar een nieuw bestand enzo, daar kom ik zelf wel uit. Het gaat mij er nu alleen om dat ik van de 'regels' alle woorden apart kan vergelijken met 'RETR'.

[ Voor 10% gewijzigd door Verwijderd op 29-04-2005 22:12 ]


Verwijderd

probeer eens te zoeken op instr of substr; dat werkt iig in VB zo...

Verwijderd

Met memcmp en _memicmp kun je woorden in een string opzoeken. check maar eens de handleiding.

[edit]
http://msdn.microsoft.com...clib/html/_crt_memcmp.asp

[ Voor 36% gewijzigd door Verwijderd op 29-04-2005 22:16 ]


Verwijderd

Verwijderd schreef op vrijdag 29 april 2005 @ 22:14:
probeer eens te zoeken op instr of substr; dat werkt iig in VB zo...
Substring heb je alleen als je een soort string class gebruikt (CString). En is trouwns om delen uit een string te halen niet om te kijken of het er in voor komt.

[ Voor 15% gewijzigd door Verwijderd op 29-04-2005 22:18 ]


Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 29 april 2005 @ 22:14:
Met memcmp en _memicmp kun je woorden in een string opzoeken. check maar eens de handleiding.
http://msdn.microsoft.com...clib/html/_crt_memcmp.asp
Dankje voor je (snelle) reactie, maar dit is volgens mij niet wat ik bedoel toch? Deze vergelijkt twee strings met elkaar en geeft een integer als resultaat. Wat ik wil is een string, bestaande uit meerdere woorden zo veranderen dat ik iets met de afzonderlijke woorden kan doen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Probeer strpos.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TaXaN
  • Registratie: April 2001
  • Laatst online: 08-09-2023
Kijk eens naar strstr() in <cstring>.
Voor een handige reference van de C++ standaard library zie hier

A polar bear is a rectangular bear after a coordinate transformation.


Verwijderd

Dat is denk ik de beste oplossing idd... gewoon een string class gebruiken voor dit soort zaken. Lekker simpel en 100den voorbeelden.

Wat ik dacht wat je wou is kijken of het woord 'RETR' in de sting voor kwam en deze dan naar een log file schrijven. Dit kun je dus met memcmp doen.

strpos ken ik niet als C++ functie ?

[ Voor 3% gewijzigd door Verwijderd op 29-04-2005 22:29 ]


Verwijderd

Topicstarter
TaXaN schreef op vrijdag 29 april 2005 @ 22:26:
Kijk eens naar strstr() in <cstring>.
Voor een handige reference van de C++ standaard library zie hier
Nou dit is dus exact wat ik bedoel. Hartelijk dank voor jullie hulp! Hebben jullie nog ideen voor wat ik kan doen met de FileZilla Server-logfile parser? Ik zou bijvoorbeeld statistieken ofzo kunnen maken. Welke gebruiker enzo het meest heeft gedownload.

Best wel cool, dat c++. :)

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 07-05 09:26

pistole

Frutter

nu wil ik niet overkomen alsof programmeren niet leuk is (vooral als het gaat om het programmeren van dingetjes om je leven makkelijker te maken) maar... waarom gebruik je geen grep o.i.d.???

Ik frut, dus ik epibreer


  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
je zou getline in combinatie met een stl string kunnen gebruiken, die heeft redelijk wat faciliteiten om een string uitelkaar te halen...

zoiets bv:

C++:
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
#include <iostream>
#include <fstream>
#include <string>


int main()
{
    std::ifstream logfile("c:\\file.log");

    if(!logfile)
    {
        std::cout << "error opening file" << std::endl;
        return 1;
    }

    std::string line;
    while(!std::getline(logfile, line).eof())
    {
        if(line.find("RETR") != std::string::npos)
        {
            // found line with RETR
            std::cout << line << std::endl;
        }
    }

    return 0;
}


de string verder uitelkaar halen kan je dan doen met substr oid.

[ Voor 18% gewijzigd door Lone Gunman op 29-04-2005 22:42 ]

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


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op vrijdag 29 april 2005 @ 22:28:
strpos ken ik niet als C++ functie ?
Verrek, nou je het zegt. :X Ik ben de laatste tijd weer teveel met Java en PHP bezig. :P

[ Voor 38% gewijzigd door Creepy op 29-04-2005 22:40 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

std::string heeft een find() method ;)
Ik kan je inderdaad erg aanraden de std::string te gebruiken voor string bewerkingen i.p.v. de eerder genoemde strstr() of memcmp() etc. Bij de C functies zul je zelf een deel geheugen / pointer beheer moeten doen, met de std::string heb je daar geen last van.
Scheelt je ook weer buffer overflows als de regel langer is dan 1000 tekens :)

offtopic:
Hoppa, en weer spuit elf...... ga eens feesten op koninginnenach ofzo stelletje nerds :+

[ Voor 13% gewijzigd door Creepy op 29-04-2005 22:40 ]

"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


Verwijderd

Scheelt je ook weer buffer overflows als de regel langer is dan 1000 tekens :)
Hoe bedoel je dit ? bij welke functie ?
Hoppa, en weer spuit elf...... ga eens feesten op koninginnenach ofzo stelletje nerds :+
Moet je zelf wel het goede voorbeeld geven he :P

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op vrijdag 29 april 2005 @ 22:52:
[...]


Hoe bedoel je dit ? bij welke functie ?
Het feit dat er een char[1000] is gedefinieerd zegt mij over het algemeen genoeg (zeker bij een "beginnend" C of C++ programmeur ;) ).
Moet je zelf wel het goede voorbeeld geven he :P
sssst :X

"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: 02-05 01:32
indeed heeft het anders wel goed gedaan hier. ;)

Maar als je C++ wil leren (en dus niet de nadruk wil leggen op C, wat ook nuttig, maar toch redelijk anders is), dan kun je inderdaad beter de string-klasse uit de standard library gebruiken.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

in jouw geval kun je misschien ook iets met sscanf

sscanf(lijn,"%s RETR %s",garbage,filenaam);

ASSUME makes an ASS out of U and ME


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Soultaker schreef op zaterdag 30 april 2005 @ 00:33:
indeed heeft het anders wel goed gedaan hier. ;)
Ik kan me voorstellen dat met een regel van 1010 tekens er 1000 tekens in die char komen en strlen() borkt omdat hij op teken 999 nog geen \0 heeft gezien. Then again, m'n C++ is wat roestig...

"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: 02-05 01:32
Hij gebruikt string::getline(), waaraan 'ie de grootte van de buffer meegeeft. Die garandeert dat er een \0 in staat ergens (nadeel is dus ook dat de regel afgekapt wordt als 'ie langer dan 999 karakters is, maar dat kan niet anders met een statische buffer).

De code in de TS zal dus zeker geen last hebben van buffer overflow (anders is het ook veel waarschijnlijker dat de getline() call al crasht en 'ie nooit bij strlen() aankomt; als 'ie er in heeft geschreven dan zal 'ie het ook wel kunnen teruglezen).

Je hebt wel een beetje gelijk: als beginnende programmeur met statische buffers en C API's werken is vragen om problemen, maar goed, er zijn ook duizenden professionele programmeurs die dagelijks betrouwbare code schrijven in C, dus het is niet alsof dat onmogelijk is. ;)

edit:
Oh ja, als je dan toch getline gebruikt, geef de grootte van de buffer dan mee als sizeof(regel) in plaats van 1000, dat voorkomt dat je de code op honderdmiljoen plaatsen moet aanpassen als je besluit de buffer groter/kleiner te maken (en de bugs die onstaan als je dat ergens vergeet, wat niet altijd makkelijk te verifiëren is).

[ Voor 48% gewijzigd door Soultaker op 30-04-2005 01:08 ]


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

http://www.cplusplus.com/ref/cstring/strstr.html

definitie van de functie:


Scans string1 for the first occurrence of string2.
The search does not include terminating null-characters.


vooral dit spreekt boekdelen:

#include <stdio.h>
#include <string.h>

int main ()
{
char str[] ="This is a simple string";
char * pch;
pch = strstr (str,"simple");
strncpy (pch,"sample",5);
puts (str);
return 0;
}

[ Voor 28% gewijzigd door Boudewijn op 30-04-2005 01:23 ]


Verwijderd

Creepy schreef op zaterdag 30 april 2005 @ 00:24:
[...]

Het feit dat er een char[1000] is gedefinieerd zegt mij over het algemeen genoeg (zeker bij een "beginnend" C of C++ programmeur ;) ).

[...]

sssst :X
Ow die 1000 :X haha ik dacht al :)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Creepy schreef op zaterdag 30 april 2005 @ 00:40:
[...]

Ik kan me voorstellen dat met een regel van 1010 tekens er 1000 tekens in die char komen en strlen() borkt omdat hij op teken 999 nog geen \0 heeft gezien. Then again, m'n C++ is wat roestig...
Inderdaad. strlen heeft geen flauw idee dat'ie na 1000 chars moet borken. Als je pech hebt vindt íe een andere 0, met geluk krijg je een Access Violation op precies de goede plek.

MSVC heeft overigens inmiddels een stack buffer check, even kijken bij de compiler vlaggetjes.

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


Verwijderd

Topicstarter
Oke, daar ben ik weer met m'n FileZilla Logfile 'Parser' :) Ik ben inmiddels na alle dagen van drank, muziek en plezier weer verder gegaan met m'n probeerseltje. Ik kom echter een fout tegen waarvan ik niet weet waar het aan ligt. Zie de volgende code of download deze. Een voorbeeld van een logfile vind je hier.

Het probleem ligt bij het 'extraheren' van de gebruikersnamen uit de regels. Op het scherm verschijnt nu wel netjes alle accountnamen enzo, maar ik wil ze in de variabele 'newAccountName' hebben. Ik dacht dit te doen door de karakters 1 voor 1 te kopieren, maar dit werkt niet. Iemand een idee wat te doen?

C++:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
const int maxNameLength = 20;
const int maxAccounts   = 50;

struct account
{
    char    name[maxNameLength];
    int     downloadCount;
};

void verwerkRegel(string line, account accountArray[], int& aantalAccounts)
{
    string newAccountName[maxNameLength];
    for(int x=28; x<=47; x++)
    {
        if(isalpha(line[x]))
        {
            cout << line[x];
            newAccountName[x] = line[x];
            /*  en hier wil ik dus iets maken zodat ik in de variable char newAccountName de gefilterde
                accountnaam heb staan en vervolgens in de struct zet (array). Helaas werkt dit niet. Op de 1
                of andere manier kan ik niet de karakters 1 voor 1 kopieren in de nieuwe char.
                Ik krijg dan een fout: 'The memory could not be written'.
            */
        }
    }
    cout << endl;
    // cout << line << endl;
}

void verwerkBestandPerRegel(char bestandsNaam[], account accountArray[], int& aantalAccounts)
{
    ifstream logfile(bestandsNaam);
    ofstream output("FilteredFile.txt");
    string line;

    while(!getline(logfile, line).eof())
    {
        if(line.find("RETR") != std::string::npos)
        {
            verwerkRegel(line, accountArray, aantalAccounts);
            /* Found a line with the word 'RETR' in it */
            output << line << "\n";
        }
    }
    logfile.close();
    output.close();
}

void main()
{
    cout    << "FileZilla Server logfile parser...\n"
            << "Please wait while processing the logfile...\n";

    int aantalAccounts = 0;
    account accountArray[maxAccounts];
    verwerkBestandPerRegel("FileZillaServer.log", accountArray, aantalAccounts);
}

  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
In het topic is al meerder keren aangegeven dat je met behulp van de find en substring methods van de std::string class de regel verder op kan splitsen. Misschien is het nuttig om een goed c++ boek te kopen...

De manier die je nu gebruikt om de naam uit de regel te halen lijkt me niet de beste, als er een naam met een spatie erin voorkomt, haal je alleen het stuk tot de spatie eruit.
Verder introduceer je allerlei beperkingen die helemaal niet nodig zijn (maximale naamlengte, maximaal aantal accounts).

Wat wil je precies bereiken eigenlijk? Uit de struct account haal ik dat je het aantal retries per account wilt weten (?)

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


Verwijderd

Topicstarter
Ja, heel simpel eigenlijk. Gewoon per account het aantal downloads.
En een account kan nooit een spatie bevatten.

Verwijderd

Topicstarter
Ik heb het nu zo gedaan:
C++:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
const int maxNameLength = 20;
const int maxAccounts   = 50;

struct account
{
    char    name[maxNameLength];
    int     downloadCount;
};

void verwerkRegel(char line[], account accountArray[], int& aantalAccounts)
{
    char newAccountName[maxNameLength];
    for(int x=28; x<=47; x++) // Van positie 28 tot 47 (staat sowieso een account-naam)
    {
        if(isalpha(line[x]))
        {
            strcpy(line[x], newAccountName[x]);
            cout << line[x];
        }
    }
    cout << endl; // volgende regel
}

void verwerkBestandPerRegel(char bestandsNaam[], account accountArray[], int& aantalAccounts, int& aantalDownloads)
{
    ifstream logfile(bestandsNaam);
    ofstream output("FilteredFile.txt");
    char line[1000];
    
    while(logfile.getline (line, 1000))
    {
        char * search;
        search = strstr(line, "RETR");
        if(search) // RETR komt voor in de regel
        {
            aantalDownloads++; // Teller voor het aantal keren dat er iets is gedownload
            verwerkRegel(line, accountArray, aantalAccounts);
        }
    }

    logfile.close();
    output.close();
}

void main()
{
    cout    << "FileZilla Server logfile parser...\n"
            << "Please wait while processing the logfile...\n";

    int aantalAccounts = 0;
    int aantalDownloads = 0;
    account accountArray[maxAccounts];
    
    verwerkBestandPerRegel("FileZillaServer.log", accountArray, aantalAccounts, aantalDownloads);
    
    cout    << "Number of downloads: " << aantalDownloads << endl;
}

Ik krijg een fout die ik echt niet begrijp. De compiler klaagt en geeft de volgende melding: error C2664: 'strcpy' : cannot convert parameter 1 from 'char' to 'char *'
Dit lijkt me vreemd, want ik probeer een char te kopieren naar een char. Dit moet toch geen problemen opleveren?

  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
Je zou het als volgt kunnen doen:

C++:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <fstream>
#include <string>
#include <map>

int main()
{
    std::ifstream logfile("c:\\logfile.log");

    if(!logfile)
    {
        std::cout << "error opening file" << std::endl;
        return 1;
    }

    std::map<std::string, int> accounts;

    std::string line;
    while(!std::getline(logfile, line).eof())
    {
        if(line.find("RETR") != std::string::npos)
        {
            try
            {
                std::string::size_type begin = line.find(" - ") + 3;
                std::string::size_type end = line.find("(", begin) - 1;
                std::string name = line.substr(begin, end-begin);
                
                accounts[name] = ++accounts[name];
            }
            catch(std::out_of_range)
            {
                // begin position out of range
            }
        }
    }

    std::map<std::string, int>::iterator i;
    for(i = accounts.begin(); i != accounts.end(); ++i)
    {
        std::cout << "account \"" << i->first << "\" retried " << i->second << " time(s)\n";
    }

    return 0;
}


De naam uit de regel halen met find en substring:
line.find(" - ") zoekt " - " in de regel en geeft de positie terug (de +3 is om te compenseren voor de lengte van " - " en de spatie erachter.
line.find("(", begin) geeft de positie van de ( achter de account naam, -1 compenseert voor de spatie voor de (. De try/catch is voor de zekerheid, aangezien line.find(" - ") een ongeldige positie terug zou kunnen geven, waardoor de opvolgende find of substr methods een out_of_range exception kunnen throwen (mocht het logfile formaat niet kloppen oid).
Als laatste kun je met substr de account naam uit de regel halen, door de begin positie aan te geven en de lengte van de account naam.

Er is vast een nettere/snellere/betere methode om hetzelfde te bereiken, maar dit lijkt me iig vrij duidelijk qua werking.

Daarna kan je een map<string, int> gebruiken om bij iedere accountnaam het aantal retries op te slaan. De naam is in dit geval de key, en het aantal retries is de value.
Met behulp van account["pietje"] krijg je een int terug die het aantal retries voorstelt (of 0 als pietje nog niet in de map stond). Een nieuw aantal retries toewijzen kan met account["pietje"] = 10;

edit: btw, ik kan op mn ftp server zonder problemen een accountnaam met spatie erin aanmaken. inloggen met de accountnaam werkt vervolgens ook gewoon.

[ Voor 12% gewijzigd door Lone Gunman op 05-05-2005 20:18 ]

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


Verwijderd

Topicstarter
He Lone Gunman, dankje! Het werkt als een trein!
Maar misschien vind je 't dom, maar ik ga liever met mijn 'eigen' dingetje verder. Toch leuker als je zelf iets hebt gemaakt en snapt. Heb je misschien een idee waarop het kopieren van de karakters niet werkt?

  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
Ik snap wel dat je met je eigen ding verder wilt, daar leer je natuurlijk het meeste van.
Als ik naar je laatste poging kijk begint het wel wat te kriebelen, het is nogal een inconsistente mix van c++ en c met een hoop statische buffers en dingen die potentieel heel erg fout kunnen gaan. Door de stl (standard template library) van c++ te gebruiken maak je het jezelf een stuk makkelijker in ieder geval...

Wat betreft strcpy, deze is gemaakt om c strings (zero terminated) te kopieeren, en verwacht daarom een pointer-to-char voor de destination en een (const) pointer-to-char voor de source (geen chars dus). Jij wilt echter de waarde van een char toewijzen, wat gewoon kan met =.

Het probleem zit m echter in je for loop:
C++:
1
2
3
4
5
6
7
8
9
10
    char newAccountName[maxNameLength];
    for(int x=28; x<=47; x++) // Van positie 28 tot 47 (staat sowieso een account-naam)
    {
        if(isalpha(line[x]))
        {
            newAccountName[x] = line[x];
            cout << line[x];
        }
    }
    cout << endl; // volgende regel

De char-array newAccountName heeft een lengte van 20 (maxNameLength).
In je for loop loopt x van 28 t/m 47...
Als je dan newAccountName[x] = line[x] doet gaat het al direct fout, want wat eigenlijk doet is:
newAccountName[28] = line[28] terwijl je newAccountName array maar 20 chars lang is...
Je probeert dus buiten de arry te schrijven, waardoor je de foutmelding "the memory could not be written" krijgt, zoals je zelf al aangaf.

Wat je wilt is het volgende (ben er vanuit gegaan dat er vanaf pos 28 in de line alpha chars staan):

newAccountName[0] = line[28];
newAccountName[1] = line[29];
etc.

Hoe je dat kan doen mag je zelf uitzoeken :)

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


Verwijderd

Topicstarter
Lone Gunman, hartstikke bedankt! Door users als jij is GOT zo goed!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
[quote]Verwijderd schreef op donderdag 05 mei 2005 @ 18:17:
C++:
1
2
3
#include <string>
const int maxNameLength = 20;
string newAccountName[maxNameLength];

Dat zijn 20 strings, initieel leeg. Nergens voor nodig, 1 string is ook genoeg. Bovendien hoef je je met std::string niet druk te maken over de lengte.

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