Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
discount 30 + hiring

Diskuze: Include sstream způsobuje chyby (rozdělení stringu na vector slov)

Aktivity
Avatar
Antonín Dolejš:3.4.2021 2:18

Ahoj, potřebuji rozdělit string na vector po jednotlivých slovech, zkusil jsem toto:

stringstream ss(input);
vector<string> output;
string line;

while (getline(ss, line, ' ')) {
        output.push_back(line);
}

s tím asi nebude žádný problém, ale abych mohl používat stringstream, tak musím includnout v hlavičce

#include <sstream>

ale jakmile tohle udělám, tak mi to hlásí chyby:

'ECANCELED' was not declared in this scope
'ENOTRECOVERABLE' was not declared in this scope
'ENOTSUP' was not declared in this scope
'EOWNERDEAD' was not declared in this scope

všechny pocházejí ze souboru error_constants.h. Když ten include zakomentuju, tak si to samozřejmě stěžuje, že to nezná stringstream, ale tyhle chyby zmizí...

Udělal jsem něco špatně, nebo v čem může být problém? Popř. prosím doporučte jiný (lepší) způsob, jak string rozdělit, jestli je to co dělám blbost...

Zkusil jsem: Zkoušel jsem samozřejmě Google, ale když jsem napsal třeba

'ENOTRECOVERABLE' was not declared in this scope

Tak vše co mi to našlo mi připadalo naprosto irrelevantní...

Chci docílit: Rozdělení stringu na slova ve vectoru -> funkčního stringstreamu.

 
Odpovědět
3.4.2021 2:18
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Antonín Dolejš
DarkCoder:3.4.2021 3:24

Pro rozdělení řetězce na jednotlivá slova (tokenizace) lze v C použít funkci strtok().
Pro použití této funkce je třeba vložit do programu hlavičkový soubor string.h.

Ukázkový program:

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

int main(void){
        char str[] = "Rozdeleni retezce na jednotliva slova";
        const char delim[] = " ";
        char *token = NULL;

        token = strtok(str, delim);
        while (token) {
                puts(token);
                token = strtok(NULL, delim);
        }

        return 0;
}

Program vypíše na obrazovku pod sebe jednotlivá slova z řetězce, jako oddělovač je stanovena mezera.
Samozřejmě slova nemusí být vypisována na obrazovku, ale mohou být zapisována do pole jak požaduješ.

Nahoru Odpovědět
3.4.2021 3:24
"Chceš-li předávat své znalosti, měj kvalitní podklady."
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.