Парсер строк на С

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ++Norton++, 19 Sep 2008.

  1. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Сразу прошу прощения, за возможное непонятное объяснение.
    Имеется char *s="test0 test1 test2". Нужно написать функцию, которая бы принимала в качестве аргумента *s и делала следующее:
    Разбивала и помещала *s в массив так, чтобы:
    Code:
    strng[0]="test0"; 
    strng[1]="test1"; 
    strng[2]="test2"; 
    
    Это как нибудь можно реализовать? Очень надо... Заранее огромное спасибо!
     
  2. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Проходишься по строке, заносишь в буфер, при пробеле сбрасываешь буффер в массив.
    Все.
     
    1 person likes this.
  3. pento

    pento Elder - Старейшина

    Joined:
    3 Jul 2006
    Messages:
    126
    Likes Received:
    24
    Reputations:
    -1
    Нашлось за 1 минуту:
    http://www.java2s.com/Code/C/String/String-Split.htm
     
    1 person likes this.
  4. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    Если на С, то юзай strtok.
    Если на С++, то удобно юзать sstream
     
    1 person likes this.
  5. Ryuzavi

    Ryuzavi Member

    Joined:
    10 Sep 2008
    Messages:
    10
    Likes Received:
    8
    Reputations:
    0
    ++Norton++, написал тебе код, думаю тебе будет все понятно (т.к. чтобы товарищу было понятно, код не оптимизировал, s[k] на null проверяется n раз например, ни какой критики).
    Code:
    #include <stdio.h>
    void read(char str[][256], char s[])
    {
        int i,k=0,j=0;
        for (i=0; i<=3; ++i)
        {
            j=0;
            while ((s[k]!=' ') && (s[k]!=NULL))
            {
                str[i][j]=s[k]; j++; k++;
            }
            str[i][j]=NULL; k++;
        }
    }
    void write(char str[][256])
    {
        int i;
        for (i=0; i<3; ++i)
        {
            printf("%s\n", str[i]);
        }
    }
    int main()
    {
        char s[]="test testing examination";
        char str[3][256];
        read(str, s);
        write(str);
        return 0;
    }
     
    2 people like this.
  6. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Спасибо, разобрался!