Avatar billede t_mons Nybegynder
11. marts 2005 - 10:24 Der er 8 kommentarer og
1 løsning

streng gymnastik

Jeg sidder her og er ny i C.
så ville høre der er nogen der kunne hjælp med lidt mht. strenge.

jeg har en streng der er kan se således ud  TAG=værdi;TAG=værdi;
NAVN=Thomas;ADR=Minvej;

nu kunne jeg godt tænke mig en funktion der har min streng som inparameter..
løber igennem strengen, sætter min 'TAG' i en char array sætter værdien i et andet char array. og så videre....

dvs tøber igennem til den møder = og forsætter så til den møder ;, dette skal så fortsættes igennem hele strengen..

en lille krølle på halen vil være at min værdi kan være indklammret med <Værdi> så skal '<' '>' sættes i et nyt char array..


HE HE HE

giver det nogen mening (altså min forklaring)

mvh
T_mons
Avatar billede medions Nybegynder
11. marts 2005 - 10:47 #1
Tror du kunne bruge denne split funktion til en hel del:

void Split(const CString& strSource, const CString& strDelimiter, CStringArray& AddIt)
{
    if(strSource.IsEmpty())
        return; // No need to do anything

    int nEnd, nBegin = 0;
    do
    {
        nEnd = strSource.Find(strDelimiter, nBegin);
        if(nEnd == -1)
            nEnd = strSource.GetLength()-1;

        AddIt.Add(strSource.Mid(nBegin, nEnd-nBegin));
        nBegin = nEnd + strDelimiter.GetLength();
    }
    while(nBegin < strSource.GetLength());
}

Fx.

    CStringArray arrOfWords;
    Split(strLine, "|", arrOfWords);

Her vil den dele en streng op for hver gang der er et pire (|), og give den dens egen post i et array.

//>Rune
Avatar billede t_mons Nybegynder
11. marts 2005 - 11:05 #2
den tager ikke højde for Før og efter min = og slet ikke hvis værdien er indklammerede i '<' '>'

funktion()
{
2 arrays
fang ord inden '=' put det i array1
fang ord imellem '=' og ';' 
hvis ordet er imellem '<' og '>' så skriv ordet ud og put det i array2 uden '<' & '>'
og så forfra..

kan ikke lige se om den funktion gør det, men hvis den gør, kan du så sætte lidt kommentar :o)

det ville være nice...

forsæt indtil min streng er løbet igennem
Avatar billede arne_v Ekspert
11. marts 2005 - 11:26 #3
Inden jeg tænker på løsning skal jeg lige vide: C ? C++ uden MFC ? C++ med MFC ?

(CString er MFC)
Avatar billede t_mons Nybegynder
11. marts 2005 - 11:27 #4
PLAIN C
Avatar billede t_mons Nybegynder
11. marts 2005 - 12:01 #5
afsætter gerne flere point
Avatar billede arne_v Ekspert
11. marts 2005 - 20:42 #6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef char *charptr;

void parse(char *input, charptr *name, charptr *value, int *n)
{
    int i,len;
    *n = 0;
    name[*n] = input;
    len = strlen(input);
    for(i=0;i<len;i++)
    {
        if(input[i] == '=')
        {
            input[i] = '\0';
            value[*n] = input + i + 1;
        }
        if(input[i] == ';')
        {
            input[i] = '\0';
            *n = *n + 1;
            name[*n] = input + i + 1;
        }
    }
}

int main()
{
    int i,n;
    char s[] = "TAG=værdi;TAG=værdi;NAVN=Thomas;ADR=Minvej;";
    charptr name[25];
    charptr value[25];
    parse(s, name, value, &n);
    for(i=0;i<n;i++)
    {
        printf("%s = %s\n",name[i],value[i]);
    }
    return 0;
}
Avatar billede arne_v Ekspert
11. marts 2005 - 20:47 #7
Og med din specielle <> håndtering:

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

typedef char *charptr;

void parse(char *input, charptr *name, charptr *value, int *bracket, int *n)
{
    int i,len;
    *n = 0;
    name[*n] = input;
    len = strlen(input);
    for(i=0;i<len;i++)
    {
        if(input[i] == '=')
        {
            input[i] = '\0';
            value[*n] = input + i + 1;
        }
        if(input[i] == ';')
        {
            input[i] = '\0';
            if(*value[*n] == '<' && input[i-1] == '>')
            {
              bracket[*n] = 1;
              value[*n] = value[*n] + 1;
              input[i-1] = '\0';
            }
            else
            {
              bracket[*n] = 0;
            }
            *n = *n + 1;
            name[*n] = input + i + 1;
        }
    }
}

int main()
{
    int i,n;
    char s[] = "TAG=værdi;TAG=værdi;NAVN=Thomas;ADR=<Minvej>;";
    charptr name[25];
    charptr value[25];
    int bracket[25];
    parse(s, name, value, bracket, &n);
    for(i=0;i<n;i++)
    {
        printf("%s = %s (%d)\n",name[i],value[i],bracket[i]);
    }
    return 0;
}
Avatar billede arne_v Ekspert
11. marts 2005 - 20:48 #8
Vigtigt: parse ændrer i input !!!!

(hvis det ikke duer, så må du allokere noget memory dynamisk og strncpy'e over i det)
Avatar billede t_mons Nybegynder
14. marts 2005 - 11:10 #9
Det virker bare....

:o)
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