[C++] Problem med placera ord i map!

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2013

[C++] Problem med placera ord i map!

Hej!

Har ett jobbigt problem som jag inte hittar någon lösning på alls. Jag har en sträng (vid namn text) med en massa repeterade ord som jag vill placera i en map så att jag vet hur många ord som finns i strängen. Så här ser en del av min kod ut:

string text = "alpha alpha alpha beta beta gamma gamma gamma gamma alpha" map<string, int> wordcount; string word; while (text >> word){ ++wordcount[word]; }

När jag försöker kompilera koden så får jag följande felmeddelande:

error: no match for ‘operator>>’ (operand types are ‘std::string {aka std::basic_string<char>}’ and ‘std::string {aka std::basic_string<char>}’)
while (text >> word){

Dold text

Jag förstår inte felmeddelandet riktigt och varför det inte fungerar heller, men om jag förstått det rätt så kan man inte använda operatorn '>>' mellan två strängar. Om jag använder istället fstream för att läsa texten ur en .txt fil så fungerar det utan problem, d.v.s:

ifstream file; file.open("text.txt"); // öppna textfilen map<string, int> wordcount; string word; while (text >> word){ ++wordcount[word]; } file.close();

fungerar utan problem.

Har ni något tips på hur jag kan ta ord ur min sträng och placera dem i en map på ett så enkelt sätt som möjligt, eller måste jag traversera varenda character i strängen text, extrahera alla ord en och en och därefter placera dem i en map (detta fungerar men känns väldigt primitivt).

Tack!

Main || Intel Core i7 980X @ 4.12GHz || ASUS Rampage III Gene || Corsair Vengeance 6x4GB @ 1800MHz || EVGA GTX 780 Reference || Creative Sound Blaster ZxR || 2x Intel 530 240 GB || Western Digital Blue WD10EZEX 1000 GB || ASUS VG248QE (no G-sync) ||
Laptop || Lenovo Thinkpad X220 4291-37G ||
Project: Pentium Clockbox || Intel Pentium G3258 ||

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

Du kan använda en stringstream (eller istringstream i detta fall eftersom du bara vill plocka ut data ur den), den fungerar som ifstream men för en sträng:

string s = "hello world"; istringstream ss(s); while (ss >> word) { ... }

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2013
Skrivet av perost:

Du kan använda en stringstream (eller istringstream i detta fall eftersom du bara vill plocka ut data ur den), den fungerar som ifstream men för en sträng:

string s = "hello world"; istringstream ss(s); while (ss >> word) { ... }

Stort tack för hjälpen!!

Main || Intel Core i7 980X @ 4.12GHz || ASUS Rampage III Gene || Corsair Vengeance 6x4GB @ 1800MHz || EVGA GTX 780 Reference || Creative Sound Blaster ZxR || 2x Intel 530 240 GB || Western Digital Blue WD10EZEX 1000 GB || ASUS VG248QE (no G-sync) ||
Laptop || Lenovo Thinkpad X220 4291-37G ||
Project: Pentium Clockbox || Intel Pentium G3258 ||