Avatar billede Simon Praktikant
01. juni 2005 - 09:24 Der er 8 kommentarer og
1 løsning

komma sepereret streng til array af int

Hvilken funktion skal jeg bruge (og hvordan) i C for at konvertere en streng som denne:
"12,4345,2354,3,888,45,453425" til et array af int?

eksempel er meget velkommen.
Avatar billede medions Nybegynder
01. juni 2005 - 09:26 #1
Se om du kan bruge dette:

bool CSID::ParsePipeSeparatedLine(CString strLine)
{
    CStringArray arrOfWords;
    Split(strLine, "|", arrOfWords);
    if(arrOfWords.GetSize() != SID_ELEMENTS)
        return false;

    m_strArt                = arrOfWords[1];    //Art
    m_strDepotID            = arrOfWords[2];    //Depots ID'et, Fx DE050
    m_strDate                = arrOfWords[3];    //Datoen for forsendelsen Format: YYYYMMDD
    m_strPackageNo            = arrOfWords[4];    //T&T nummer
    m_strDeliveryNote        = arrOfWords[5];    //Følgeseddelsnummer
    m_strSoftwareVersion    = arrOfWords[6];    //Software version
    m_strFormatVersion        = arrOfWords[7];    //Version af formatet
    m_strUntitled            = arrOfWords[8];    //Forsendelsesplan version

    return true;
}

//>Rune
Avatar billede Simon Praktikant
01. juni 2005 - 09:28 #2
Er dette ikke C++? Jeg bruger bare normal C i det her tilfælde.
Avatar billede medions Nybegynder
01. juni 2005 - 09:28 #3
Hmm og her kommer også lige Split funktionen:

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

//>Rune
Avatar billede Simon Praktikant
01. juni 2005 - 09:30 #4
nej nej nej :-) det her er jo c++, jeg skal bruge c!
Avatar billede medions Nybegynder
01. juni 2005 - 09:59 #5
LOL, sorry, det er jo også tideligt om morgenen ;-)

//>Rune
Avatar billede medions Nybegynder
01. juni 2005 - 10:02 #6
Så se om du kan bruge flg. til noget :)

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

char *sbreak(char *s, char *tok, char *del)
{
char *new_s;
char *p = tok;

/* If no more string, bail */
if (*s == '\0')
return 0;

/* If no delimiters, seek to end */
if ((new_s = strstr(s, del)) == 0)
new_s = s + strlen(s);

while (s != new_s)
*p++ = *s++;

*p = '\0';

/* Bump past the delimiter if it's there */
if (*new_s)
s += strlen(del);

return s;
}

int main(void)
{
char a[10];
char s[] = "this::is::a::::test";
char *p = s;

while ((p = sbreak(p, a, "::")))
{
if (*a)
printf("%s\n", a);
}

return 0;
}

//>Rune
Avatar billede arne_v Ekspert
01. juni 2005 - 10:20 #7
C har faktisk en indbygget funktion strtok som må kunne anvendes
Avatar billede Simon Praktikant
01. juni 2005 - 10:45 #8
Tak til jer begge to.

Jeg har prøvet med strtok, men da jeg ikke har library'et til rådighed blev jeg nødt til selv at skrive min funktion.

min kode ser sådan ud:
    int i;        // index ved iterering gennem streng
    int tal[100];    // indeholder alle talene til sidst
    int talIndex =0;
    char inputChar;
   
    for(i=0; i< 100;i++)
        tal[i]=0;
   
    // hent streng
    for (i=0; i < len; i++)
    {
        get_user(inputChar, buff + i);   
       
        if(inputChar != ',')
        {   
            // konverter substreng til int og placer i array af int
            tal[talIndex] = tal[talIndex]*10 +(inputChar-48);
        }   
        else
        {
            printk(KERN_INFO " *********************: %d \n",tal[talIndex]);
            talIndex ++;
        }
    }

..... hvor funktionen "get_user(inputChar, buff + i);" bliver brugt til at hente et karakter ind af gangen fra brugeren. Koden jeg her har lavet bliver afviklet i et linux-kerne-modul.
Avatar billede arne_v Ekspert
01. juni 2005 - 20:19 #9
måske skulle du have sagt at det var et Linux kernel modul - det er jo en lidt
speciel kontekst
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



Seneste spørgsmål Seneste aktivitet
I dag 15:08 Http client med X509Certificate2 Af joki i C#
I dag 13:02 Hjemmenetværk Af Andfer i LAN/WAN
I dag 11:17 Chrombook Af lurup i Andre styresystemer
I går 15:20 Core i5-7200 processor Af Wombat i Windows
I går 15:07 Hjælp med HTML og CSS Af Nojsa i HTML