Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
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
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
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.