⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 split.c

📁 解吸SEED格式的源代码
💻 C
字号:
/* ------------------------------------------------------------------- */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "rdseed.h"/* ------------------------------------------------------------------- */char *get_fld();/* ------------------------------------------------------------------- *//* split() will parse a string into components, based on the fs parameter * The fs param is very specific, space is space, tab is tab, etc * Always call fuse() when done */int split(s, parts, fs)char *s;        	/* thing to split */char ***parts;   	/* put parts into */char fs;       		/* field separator */ {         int n, i, finished;        char *wrkstr;	char *ch_ptr;	i = 0;	finished = FALSE;	wrkstr = malloc(strlen(s) + 1);         /* check for in bounds */        if (wrkstr == NULL)        {                fprintf(stderr, "split(): too big to split - out of memory - string= %s\n", s);                return 0;        }                /* determine how many "parts" will be split */	if (strlen(s) == 0)		return 0;	strcpy(wrkstr, s);	n = 0;	/* always at least one part unless null string */	n = count_chars(wrkstr, fs) + 1;        *parts = (char **)malloc(n * sizeof(char *));        ch_ptr = get_fld(wrkstr, fs);	do         {                (*parts)[i] = (char *)malloc(strlen(ch_ptr) + 1);		strcpy((*parts)[i], ch_ptr);		i++; /* count the field */		if (i == n)		{			finished = TRUE;			continue;		}		if (i > n)		{			fprintf(stderr, "split(), got \"splitting\" headache, not tonight dear!\n");			break;		}                ch_ptr = get_fld(NULL, fs);        } while (!finished);	/* make check for i < n, not sure why this would happen */	if (i < n)	{		*parts = (char **)realloc(*parts, i * sizeof(char *));	} 	free(wrkstr);        return i;}/* ----------------------------------------------------------------------- */int count_chars(str, ch)char *str;char ch;{        int count = 0;        while (*str)        {                if (*str == ch)                        count++;                str++;        }        return count;}/* ------------------------------------------------------------------------ */char *get_fld(s, fs)char *s, fs;{	static char *sav_fld_ptr;	char *fld_ptr;	int n;	if (s != NULL)	{		fld_ptr = s;	}	else		fld_ptr = sav_fld_ptr;	if (*fld_ptr == '\0')		return fld_ptr;	n = 0;	while ((fld_ptr[n] != fs) && (fld_ptr[n] != '\0'))		n++;		if (fld_ptr[n] != '\0')	{		/* move past fs */		sav_fld_ptr = fld_ptr + n + 1;	}	else		sav_fld_ptr = fld_ptr + n;	fld_ptr[n] = 0;	return fld_ptr;} int fuse(parts, count)char ***parts;int count;{	int i;		for (i = 0; i < count; i++)		free((*parts)[i]);	if (count > 0)		free(*parts);	*parts = 0;	return 0;}/* ------------------------------------------------------------------- *//* ------------------------------------------------------------------- */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -