PDA

Просмотр полной версии : Парсер строк на С


++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
Сразу прошу прощения, за возможное непонятное объяснение.
Имеется 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
Спасибо, разобрался!