Просмотр полной версии : Парсер строк на С
++Norton++
19.09.2008, 23:12
Сразу прошу прощения, за возможное непонятное объяснение.
Имеется char *s="test0 test1 test2". Нужно написать функцию, которая бы принимала в качестве аргумента *s и делала следующее:
Разбивала и помещала *s в массив так, чтобы:
strng[0]="test0";
strng[1]="test1";
strng[2]="test2";
Это как нибудь можно реализовать? Очень надо... Заранее огромное спасибо!
Проходишься по строке, заносишь в буфер, при пробеле сбрасываешь буффер в массив.
Все.
Сразу прошу прощения, за возможное непонятное объяснение.
Имеется 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
Если на С, то юзай strtok.
Если на С++, то удобно юзать sstream
++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
Спасибо, разобрался!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot