Avatar billede bumle90 Nybegynder
23. januar 2004 - 16:29 Der er 6 kommentarer og
1 løsning

fjerne tegn fra en streng

Hej. Jeg har en lang streng der ligger i et array på 100000 pladser.
Denne streng indeholder delstrenge der er spereret af \n.
Jeg ville høre om der var nogle der havde en smart ide til at tage hver enkelt delstreng ud 1 ad gangen.
fjerne højst mellem 0 og 3 karakterer fra den, og skrive strengen ud.
En understreng kan have følgende udseender
<mappe>
</mappe>
hej.txt
Jeg er interresseret i at fjerne tegnene < og > og /.

Den store samlede streng ser fx. sådan her ud :

<mappe>\n
hej.txt\n
<mappe2>\n
hej1.txt\n
</mappe2>\n
</mappe>\n

Nogle forslag :)
Avatar billede arne_v Ekspert
23. januar 2004 - 16:33 #1
Umiddelbart lyder det vel som en for løkke der løber arrayet igennem
og kopierer alle tegn undtagen <>/ over i et andet array.
Avatar billede bumle90 Nybegynder
23. januar 2004 - 16:57 #2
Fik lavet en :)
Takker

char* removeTags(char* line)
{
    unsigned int i,j=0;
    char cleanLine[255];
    printf("nu\n");
    for(i=0;i<=strlen(line);i++)
        if(*(line+i)!='<' && *(line+i)!='>' && *(line+i)!='/')
            cleanLine[j++]=*(line+i);
return cleanLine;
}
Avatar billede bumle90 Nybegynder
23. januar 2004 - 19:11 #3
Lægger du et svar Arne...og kan jeg få lovv at spørge om en ekstra ting ?
Avatar billede arne_v Ekspert
23. januar 2004 - 19:18 #4
svar

ja
Avatar billede bumle90 Nybegynder
23. januar 2004 - 19:49 #5
oki...mit problem er at jeg gerne vil konkatenere en streng...Jeg har gjort det mange gange før...Og gør¨på præcis samme måde nu..Men den kommer med runtime fejl hele tiden...
Måske du kan se hvad der er galt?
Her er noget kode :

int decideAction(char* line)
{
    if(strchr(line,'<')!=NULL && strchr(line,'>')!=NULL && strchr(line,'/')==NULL)//Line indeholde < & > og !backslash
        return 1;//folder start
    else if(strchr(line,'<')!=NULL && strchr(line,'>')!=NULL && strchr(line,'/')!=NULL)//Line indeholde < & > & backslash
        return 2;//folder slut
    else if(strchr(line,'<')==NULL && strchr(line,'>')==NULL && strchr(line,'/')==NULL)//Line indeholde !< & !> & !backslash
        return 3;//filnavn
    else
        return 0;
}

char* removeTags(char* line)
{
    unsigned int i,j=0;
    char cleanLine[255];
    for(i=0;i<=strlen(line);i++)
        if(*(line+i)!='<' && *(line+i)!='>' && *(line+i)!='/')
            cleanLine[j++]=*(line+i);
return cleanLine;
}

void sorterXML()
{
    char* tok;
    char* sti={0};
    char* tempfolder={0};
    char fil[]={0};
    int ctr=0;
    int action=99;
    FILE* fp;
    fp=fopen("comp.txt","w");
   
    tok = strtok (str3,"\n");
    while (tok != NULL)
    {
        action = decideAction(tok);
        tempfolder=removeTags(tok);

    sti=strcat(sti,tempfolder);
/*
            if(action==1)
            {
                sti=strcat(sti,"\\");
               
            }
            if(action==2)
                sti[(strlen(sti)-(strlen(removeTags(tok))+1))]='\0';
            if(action==3)
*/                printf("action : %i -- Fil : %s\n",action ,tempfolder);
        tok = strtok (NULL, "\n");
    }
    fclose(fp);
}
Avatar billede arne_v Ekspert
23. januar 2004 - 19:55 #6
sti peger på ingenting

char* sti={0};

=>

char* sti[256] = "";
Avatar billede arne_v Ekspert
23. januar 2004 - 22:10 #7
Det sidste er noget vrøvl.

char sti[256] = "";

uden stjerne - men det havde du nok gættet.
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