Gå til innhold

Hjelp på en oppgave i en bok


Anbefalte innlegg

Jeg gav boka Thinking in c++ en sjangse så jeg starta på den. Gjorde unna oppgave 1 og 2 lett, Men så kom oppgave 3 og den lyder som følgende : Create a program that opens a file and counts the whitespace seperated words in the file. Det jeg gjorde da var og lagde en txt fil med 3 ord. Tidligere i boka var det vist et eksempel på hvordan man kunne dele opp ordene og sette dem på linje nedover.

 

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main() {
   int t = 0;
   vector<string> words;
   ifstream in("test.txt");
   string word;
   while(in >> word)
   words.push_back(word);
   for(int i = 0; i < words.size();++i)
   cout << words[i] << endl;
   system("pause");
}

 

dette gjorde jeg da og det kom fram.

 

jaja
jajo
jeje

 

Men hvordan i huleste får jeg til å telle hvor mange mellomrom det er i den txt fila? Jeg er nabb i c++ så litt nøye forklaringer hadde gjort seg :whistle:

Endret av Kjeksen
Lenke til kommentar
Videoannonse
Annonse

du vet at det er 3 ord, altså er det 2 mellomrom, hvis det ikke er noe sånnt som

      hei         skada                             osv

du vet også at ordene ligger i vectoren "words" og du ser også at den har en metode som heter size()..

 

altså words.size() - 1 er antall mellomrom

 

oops forumet har skada formatering

 

edit, hvis du vil telle antall mellomrom som i eksempelet over kan du også lese inn hele filen i en std::string str f.eks og gjøre std::count_if(str.begin(), str.end(), _1 == ' ');

hvor _1 er en boost lambda-sak eller skrive din egen predicate, men så langt har du kanskje ikke kommet ennå :X

Endret av saboi
Lenke til kommentar
du vet at det er 3 ord, altså er det 2 mellomrom, hvis det ikke er noe sånnt som

      hei         skada                             osv

du vet også at ordene ligger i vectoren "words" og du ser også at den har en metode som heter size()..

 

altså words.size() - 1 er antall mellomrom

 

oops forumet har skada formatering

 

edit, hvis du vil telle antall mellomrom som i eksempelet over kan du også lese inn hele filen i en std::string str f.eks og gjøre std::count_if(str.begin(), str.end(), _1 == ' ');

hvor _1 er en boost lambda-sak eller skrive din egen predicate, men så langt har du kanskje ikke kommet ennå :X

eehmm...okai..jeg skal gjøre et forsøk..noen andre måter å løse problemstillingen på eller? noe som kanskje er litt enklere som jeg forstår noe av :cry:

 

men takk for svarene :thumbup:

Lenke til kommentar

Første poeng er å lese oppgaven skikkelig. "counts the whitespace seperated words" betyr ikke å telle antall 'whitespace', men å telle antall ord adskillt av whitespace.

#include <string>

#include <fstream>

#include <iostream>

using namespace std;

 

int main() {

    int t = 0;

    ifstream in("test.txt");

    string word;

    while(in >> word) t++;

    cout << t << endl;

}

Endret av JBlack
Lenke til kommentar
Første poeng er å lese oppgaven skikkelig. "counts the whitespace seperated words" betyr ikke å telle antall 'whitespace', men å telle antall ord adskillt av whitespace.

uff ja, las feil :roll:

men den koden der var lett å forstå også. Synst noen ting i Thinking in c++ volume 1 er ikke så lett å forstå. Ivertfall ikke for meg som nettop har startet med c++.

Lenke til kommentar
Jeg er enig. Mr. Eckel har noen ganger en litt knotete måte å formulere seg på.

 

Men, du får hva du betaler for :) I dette tilfellet mye, mye mer.

hehe joda sant d :D

men syns godt at fasiten kunne ha vært med..har han først gitt ut hele boka så synst jeg jaggu at han bør være så grei å slenge ut den forbaska fasiten

Endret av Kjeksen
Lenke til kommentar

#include <cstdlib>
//ta imot input, osv..
while(getline(in, word))
 for(int i = 0; i !=  word.size(); i++)
   if(isalpha(word[i]) && isspace(word[--i])
     count++;
 count++;    //Den teller ikke med det første ordet, for der er det ikke noe whitespace

Det er ikke sikkert at denne koden funker helt, for jeg har ikke testa den, og det gikk rimlig fort dette her, men du skjønner kansje tankegangen. Dessuten så er det god trening i å rette feil! ;)

Lenke til kommentar

Jeg har bevegd meg litt videre i oppgavene og komt til en oppgave og den er sånn: Display a file a line at a time, waiting for the user to press the "enter" key after each line. Altså, jeg kan ikke huske å ha sett at han nevnt sånn ca. hvordan man kan gjøre det. Men har prøvd å søkt litt, men har ikke funnet noe som hjelper. Lurer på om jeg kanskje skal bruke break?

 

trenger littegrann hjelp på den :hmm:

Endret av Kjeksen
Lenke til kommentar
Jeg tror mitt eksempel skal funke nå..

Men for saboi sitt så tror jeg du må #include <limits.h> eller noe..

nja, den funket sånn halveis ivertfall. Det jeg måtte gjøre var å bytte file med in, visst ikke, så fikk jeg feilbeskjed.

 

her er koden samlet da

 

using namespace std;

int main() {
   string word;
   ifstream in("Fillvector.cpp");
  while(getline(in, word)) {
while(cin.get() == '\n');      
   cout << word << endl;
}
}

Men, her måtte jeg trykke en bokstav og så enter, og antall bokstaver blir antall linjer som blir vist. Og det er ikke helt det jeg er påjakt etter..men nesten ivertfall..

Endret av Kjeksen
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...