Kjeksen Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 (endret) 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 Endret 24. februar 2005 av Kjeksen Lenke til kommentar
saboi Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 (endret) 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 24. februar 2005 av saboi Lenke til kommentar
Kjeksen Skrevet 24. februar 2005 Forfatter Del Skrevet 24. februar 2005 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 men takk for svarene Lenke til kommentar
saboi Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 min første måte skjønner du vel noe av? den har du jo omtrent i koden du viste i det første eksempelet ditt. hvis ikke bør du forstå hva din egen kode gjør før du går videre Lenke til kommentar
JBlack Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 (endret) 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 24. februar 2005 av JBlack Lenke til kommentar
☀ ❄ Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 (endret) Men han lærer ikke like mye av å lese løsningen (din), som av å finne ut av det selv. Edit: Glemte et ord Endret 24. februar 2005 av Myubi Lenke til kommentar
Kjeksen Skrevet 25. februar 2005 Forfatter Del Skrevet 25. februar 2005 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 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
☀ ❄ Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 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. Lenke til kommentar
Kjeksen Skrevet 25. februar 2005 Forfatter Del Skrevet 25. februar 2005 (endret) 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 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 25. februar 2005 av Kjeksen Lenke til kommentar
Kjeksen Skrevet 25. februar 2005 Forfatter Del Skrevet 25. februar 2005 "Mye vil ha mer." nei jeg vil kun ha fasiten Lenke til kommentar
Dead_Rabbit Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 #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
Kjeksen Skrevet 25. februar 2005 Forfatter Del Skrevet 25. februar 2005 (endret) 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 Endret 25. februar 2005 av Kjeksen Lenke til kommentar
saboi Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 while(getline(file, word)) { cout << word << endl; cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } Lenke til kommentar
Dead_Rabbit Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 (endret) Er ikke dette like greit: while(getline(file, word)) { while(cin.get() != '\n'); ; cout << word << endl; } Mye enklere spør du meg.. Endret 25. februar 2005 av zirener Lenke til kommentar
Kjeksen Skrevet 25. februar 2005 Forfatter Del Skrevet 25. februar 2005 har testet begge, men får masse feilbeskjeder i begge 2 ja.. Lenke til kommentar
Dead_Rabbit Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 (endret) Jeg tror mitt eksempel skal funke nå.. Men for saboi sitt så tror jeg du må #include <limits.h> eller noe.. edit: Redigerte forrige post igjen.. Endret 25. februar 2005 av zirener Lenke til kommentar
Kjeksen Skrevet 25. februar 2005 Forfatter Del Skrevet 25. februar 2005 (endret) 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 25. februar 2005 av Kjeksen Lenke til kommentar
JBlack Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 using namespace std; int main() { string word; ifstream in("Fillvector.cpp"); while(getline(in, word)) { cout << word << endl; while(cin.get() != '\n'); } } Trur eg, ha'kke tid å teste. Lenke til kommentar
saboi Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 koden min funker. bare inkluder limits. og jeg syns min er ganske mye penere enn din jeg zirener syns ikke det er så mye lettere å ha flest mulig looper Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå