Toon posts:

[c++] endl afvangen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Na 3 uur gezocht te hebben keer ik mij tot jullie...

Ik ben een beginnner in c++, dus het antwoord op mijn vraag zal wellicht simpel zijn

Ik wil 2 text files inlezen end eze vergelijken met mekaar.
Als er verschillen zijn, meot ik aangeven in welke regel.
Om het aantal regels te tellen lijkt mij dat ik opzoek ga naar een endl, en als ik die gevonden heb een int ophogen met 1.

Maar hoe vergelijk ik een string of char met een endl??

C++:
1
2
3
4
5
6
7
8
9
10
if(!inFile1) cout << "Error:Cannot read file\n";
    
int count_line = 1;
char s1;
    
while(inFile1 >> s1){
    if(s1 == endl){ //mag niet van compiler ;)
        cout << "blaat" << endl;
    }
}

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13-05 06:47
Je kunt characters dan beter vergelijken met '\n'

Als alternatief kun je gewoon getline gebruiken om het bestand regel voor regel in te lezen (dat vergelijkt ook wat makkelijker):
C++:
1
2
3
4
5
6
7
#include <iostream>
#include <string>
..
unsigned lines = 0;
std::string line;
while(std::getline(file, line))
    ++lines;

Dat is niet de meest efficiënte manier, maar wellicht toereikend in jouw geval. (Karakter voor karakter inlezen is qua performance ook niet ideaal waarschijnlijk, hoewel er gelukkig wel wat buffering voor je gedaan wordt.)

[ Voor 19% gewijzigd door Soultaker op 22-02-2005 19:40 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een "endl" is niet iets dat je in een stream stopt. Het is gewoon een functie die een referentie naar een ostream als parameter heeft, en in ostream bestaat er een specifieke << overload voor dat soort functies. Daarom kun je bijv. dit doen:

C++:
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>

std::ostream & myfunc (std::ostream & o)
{
    return o << "Hallo daar";
}

int main ()
{
    std::cout << myfunc;     // print "Hallo daar" op het scherm
}


Een endl is simpelweg een functie die een '\n' op de stream zet en daarna een flush doet.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Soultaker schreef op dinsdag 22 februari 2005 @ 16:02:
Je kunt characters dan beter vergelijken met '\n'

Als alternatief kun je gewoon getline gebruiken om het bestand regel voor regel in te lezen (dat vergelijkt ook wat makkelijker):
C++:
1
2
3
4
5
6
7
#include <iostream>
#include <string>
..
unsigned lines = 0;
std::string line;
while(file >> line)
    ++lines;

Dat is niet de meest efficiënte manier, maar wellicht toereikend in jouw geval. (Karakter voor karakter inlezen is qua performance ook niet ideaal waarschijnlijk, hoewel er gelukkig wel wat buffering voor je gedaan wordt.)
In jou code haal ik niet helemaal uit hoe je de methode getLine() gebruikt...Wat jij hier doet, is woord voor woord ophalen en lines ophogen. Je telt dus de woorden en niet de regels...of snap ik het nou niet??

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13-05 06:47
Verwijderd schreef op dinsdag 22 februari 2005 @ 19:02:
In jou code haal ik niet helemaal uit hoe je de methode getLine() gebruikt...Wat jij hier doet, is woord voor woord ophalen en lines ophogen. Je telt dus de woorden en niet de regels...of snap ik het nou niet??
Oeps, je hebt gelijk; ik had het verkeerd geschreven. Regel 6 moet dus while(std::getline(file, line)) zijn (ik heb het in mijn post gefixed). Goed gezien!