Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Парсер строк на С (https://forum.antichat.xyz/showthread.php?t=85438)

++Norton++ 19.09.2008 23:12

Парсер строк на С
 
Сразу прошу прощения, за возможное непонятное объяснение.
Имеется char *s="test0 test1 test2". Нужно написать функцию, которая бы принимала в качестве аргумента *s и делала следующее:
Разбивала и помещала *s в массив так, чтобы:
Код:

strng[0]="test0";
strng[1]="test1";
strng[2]="test2";

Это как нибудь можно реализовать? Очень надо... Заранее огромное спасибо!

nerezus 20.09.2008 00:33

Проходишься по строке, заносишь в буфер, при пробеле сбрасываешь буффер в массив.
Все.

pento 20.09.2008 01:13

Цитата:

Сообщение от ++Norton++
Сразу прошу прощения, за возможное непонятное объяснение.
Имеется char *s="test0 test1 test2". Нужно написать функцию, которая бы принимала в качестве аргумента *s и делала следующее:
Разбивала и помещала *s в массив так, чтобы:
Код:

strng[0]="test0";
strng[1]="test1";
strng[2]="test2";

Это как нибудь можно реализовать? Очень надо... Заранее огромное спасибо!

Нашлось за 1 минуту:
http://www.java2s.com/Code/C/String/String-Split.htm

4p3 20.09.2008 01:17

Если на С, то юзай strtok.
Если на С++, то удобно юзать sstream

Ryuzavi 20.09.2008 01:40

++Norton++, написал тебе код, думаю тебе будет все понятно (т.к. чтобы товарищу было понятно, код не оптимизировал, s[k] на null проверяется n раз например, ни какой критики).
Код:

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


++Norton++ 20.09.2008 01:41

Спасибо, разобрался!


Время: 19:36