В два этапа, я использовал что-то вроде этого:
#include <ansi_c.h>
//tokenizing a string
int GetCount(char *in, char *delim, int *m);
int GetStrings(char *in, char *delim, int count, char **out);
void main(void)
{
int count, maxlen, i;
char inpString[]={"Hello#Greatest#Day#Today"};
char *resultBuf[10];
//get a count of strings to store
count = GetCount(inpString, "#", &maxlen);
for(i=0;i<10;i++)
{
resultBuf[i] = calloc(maxlen+1, sizeof(char));
}
//Store strings in arrays
GetStrings(inpString, "#", count, resultBuf);
for(i=0;i<count;i++)
{
printf("%s\n", resultBuf[i]);
free(resultBuf[i];
}
}
//Gets count of tokens (delimited strings)
int GetCount(char *in, char *delim, int *m)
{
char *buf=0;
char temp1[10]={0};
char *inStr;
int count = 0;
int max = 0, keepMax = 0;
if(in)
{
inStr = calloc(strlen(in)+1, sizeof(char));
strcpy(inStr, in);
if(strlen(inStr) > 1)
{
count = 0;
buf = strtok(inStr, delim);
while(buf)
{
strcpy(temp1, buf);
max = strlen(temp1);
(max > keepMax)?(keepMax = max):(keepMax == keepMax);
count++;
buf = strtok(NULL, delim);
}
*m = keepMax;
}
free(inStr);
}
return count;
}
//Gets array of strings
int GetStrings(char *in, char *delim, int count, char **out)
{
char *buf=0;
char *inStr;
int i = 0;
if(in)
{
inStr = calloc(strlen(in)+1, sizeof(char));
strcpy(inStr, in);
if(strlen(inStr) > 1)
{
buf = strtok(inStr, delim);
while(buf)
{
strcpy(out[i], buf);
buf = strtok(NULL, delim);
i++;
}
}
free(inStr);
}
return 0;
}
Я бы начать с написания алгоритма (проверки), а затем некоторые * код *. если это не сработает, принесите его сюда, и мы увидим, что мы можем сделать, чтобы помочь. – WhozCraig
Извините, я просто подумал, что было бы просто для кого-то более опытного, чем я, чтобы показать мне способ реализовать это, но я думаю, что решение сложнее, чем я думал. –
Ну вот кикстарт. 1. Найдите размер файла (см. 'Fseek()' и 'ftell()'). 2. Выделите один буфер, достаточно большой для всего файла +1 для нуль-termiator (см. 'Malloc()'). 3. Прочитайте весь файл в буфер (см. 'Freed()'). 4. Установите терминатор '0' в * конец * буфера. И, наконец, перейдем к буфере с помощью 'strtok()' using '" # "' как ваш разделитель. Когда закончите, не забудьте освободить * просто * исходный блок памяти, выделенный в (2) выше. Просмотрите все те API, которые только что упомянуты, и сформулируйте свой план. Удачи. – WhozCraig