Avatar billede noerbo Nybegynder
06. november 2008 - 20:02 Der er 5 kommentarer og
2 løsninger

split string i c++

Hej

  Jeg står og mangler en funktion, der kan dele en std streng op omkring et givent tegn. I mit tilfælde omkring spaces.

  Eks

  string test = "hej med dig"

  kunne give et array hvor første element er hej, andet er med og tredje dig.


  Jeg synes ikke rigtigt jeg har kunnet finde noget på google, men synes ikke det kan passe at det ikke findes?
Avatar billede arne_v Ekspert
06. november 2008 - 20:04 #1
Fra lageret:

vector<string> split(char sep,string s)
{
    vector<string> res;
    string tmp = "";
    for(int i=0;i<s.size();i++)
    {
        if(s[i]==sep)
        {
            if(tmp.size()>0)
            {
                res.push_back(tmp);
                tmp = "";
            }
        }
        else
        {
            tmp = tmp + s[i];
        }
    }
    if(tmp.size()>0)
    {
        res.push_back(tmp);
    }
    return res;
}
Avatar billede dennismp Nybegynder
06. november 2008 - 20:27 #2
#include <string>
#include <sstream>
#include <vector>
#include <iostream>

std::vector<std::string> words;

std::stringstream in("Hej med dig");
std::string w;

while(std::getline(in, w, ' '))
    words.push_back(w);
Avatar billede noerbo Nybegynder
06. november 2008 - 20:45 #3
arne_v tak skal du have, det virker perfekt.

Du skulle vel ikke også ligge inde med noget på lageret, der kan lave en string om til en float, hvor det er muligt at se om der er sket en fejl grundet forkert input, altså hvor der indgår et forkert tegn.

Pt har jeg
    std::string a = "137.5";
    std::istringstream b(a);
    float f;
    b >> f;


om ikke andet gider du så ikke svare?
Avatar billede arne_v Ekspert
06. november 2008 - 21:12 #4
Eksempel:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

void str2fp(string s)
{
    stringstream ss(s);
    double x;
    ss >> x;
    if(ss.fail())
        cout << s << " is not a double" << endl;
    else
        cout << s << " = " << x << endl;
}

int main()
{
    str2fp("123.45");
    str2fp("abc");
    return 0;
}
Avatar billede arne_v Ekspert
06. november 2008 - 21:12 #5
Faktisk synes jeg at dennis's forslag med at bruge getline på en stringstream til at læse
ord ud med er bedre end min mere manuelle metode !
Avatar billede arne_v Ekspert
06. november 2008 - 21:13 #6
og svar
Avatar billede noerbo Nybegynder
06. november 2008 - 21:16 #7
Okay, tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester