Avatar billede loevgaard Praktikant
29. april 2006 - 14:44 Der er 4 kommentarer og
1 løsning

explode funktion

Skal bruge en funktion, explode, som gør præcis det samme som PHPs funktion af samme navn: http://dk2.php.net/explode
Avatar billede arne_v Ekspert
29. april 2006 - 14:50 #1
bruger du C strenge (nul terminerede arrays) eller C++ STL std::string eller ... ?
Avatar billede arne_v Ekspert
29. april 2006 - 15:11 #2
her en en simpel løsning med C nul terminerede char arrays:

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

#define MAX_ELM 25
#define MAX_LEN 25

int split(char buf[MAX_ELM][MAX_LEN],char sep,char *s)
{
    int res,ix,i;
    res = 0;
    ix = 0;
    for(i=0;i<strlen(s);i++)
    {
        if(s[i]==sep)
        {
            if(ix>0)
            {
                buf[res][ix] = '\0';
                res++;
                ix = 0;
            }
        }
        else
        {
            buf[res][ix] = s[i];
            ix++;
        }
    }
    if(ix>0)
    {
        buf[res][ix] = '\0';
        res++;
    }
    return res;
}

int main()
{
    int n,i;
    char buf[MAX_ELM][MAX_LEN];
    n = split(buf,' ',"a bb ccc  dddd");
    for(i=0;i<n;i++)
    {
        printf("%s\n",buf[i]);
    }
    return 0;
}

det er ikke så pænt med de 2 MAX konstanter, men eksemplet skulle gerne være
nemt at forstå
Avatar billede arne_v Ekspert
29. april 2006 - 23:36 #3
her er en C++ version med vector og STL std::string

#include <iostream>
#include <vector>
#include <string>

using namespace std;

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;
}

int main()
{
    vector<string> res = split(' ',"a bb ccc  dddd");
    for(int i=0;i<res.size();i++)
    {
        cout << res[i] << endl;
    }
    return 0;
}
Avatar billede arne_v Ekspert
29. april 2006 - 23:36 #4
og et svar
Avatar billede loevgaard Praktikant
04. maj 2006 - 23:55 #5
Tak
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