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

📄 split.c

📁 代码检索工具GLOBAL源码。可用来浏览分析LINUX源码。
💻 C
字号:
/* * Copyright (c) 2002 Tama Communications Corporation * * This file is part of GNU GLOBAL. * * GNU GLOBAL is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU GLOBAL is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA. */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include "split.h"/* * Substring manager like perl's split. * * Initial status. *              +------------------------------------------------------ *         line |main         100    ./main.c        main(argc, argv)\n * * The result of split(line, 4, &list): * *              +------------------------------------------------------ * list    line |main\0       100\0  ./main.c\0      main(argc, argv)\n * +---------+   ^   ^        ^  ^   ^       ^       ^ * |npart=4  |   |   |        |  |   |       |       | * +---------+   |   |        |  |   |       |       | * | start  *----+   |        |  |   |       |       | * | end    *--------+        |  |   |       |       | * | save ' '|                |  |   |       |       | * +---------+                |  |   |       |       | * | start  *-----------------+  |   |       |       | * | end    *--------------------+   |       |       | * | save ' '|                       |       |       | * +---------+                       |       |       | * | start  *------------------------+       |       | * | end    *--------------------------------+       | * | save ' '|                                       | * +---------+                                       | * | start  *----------------------------------------+ * | end    *--+ * | save    | | * +---------+ = * * The result of split(line, 2, &list): * *              +------------------------------------------------------ * list    line |main\0       100    ./main.c        main(argc, argv)\n * +---------+   ^   ^        ^ * |npart=2  |   |   |        | * +---------+   |   |        | * | start  *----+   |        | * | end    *--------+        | * | save ' '|                | * +---------+                | * | start  *-----------------+ * | end    *--+ * | save    | | * +---------+ = * * The result of recover(). *              +------------------------------------------------------ *         line |main         100    ./main.c        main(argc, argv)\n * * Recover() recover initial status of line with saved char in savec. */#define isblank(c)	((c) == ' ' || (c) == '\t')/* * split: split a string into pieces * *	i)	line	string *	i)	npart	parts number *	io)	list	split table *	r)		part count */intsplit(line, npart, list)	char *line;	int npart;	SPLIT *list;{	char *s = line;	struct part *part = &list->part[0];	int count;	if (npart > NPART)		npart = NPART;	npart--;	for (count = 0; *s && count < npart; count++) {		while (*s && isblank(*s))			s++;		if (*s == '\0')			break;		part->start = s;		while (*s && !isblank(*s))			s++;		part->end = s;		part->savec = *s;		part++;	}	if (*s) {		while (*s && isblank(*s))			s++;		part->start = s;		part->end = (char *)0;		part->savec = 0;		count++;		part++;	}	while (part-- > &list->part[0]) {		if (part->savec != '\0')			*part->end = '\0';	}	return list->npart = count;}/* * recover: recover initial status of line. * *	io)	list	split table */voidrecover(list)	SPLIT *list;{	int i, c;	for (i = 0; i < list->npart; i++) {		if ((c = list->part[i].savec) != '\0')			*(list->part[i].end) = c;	}}/* * split_dump: dump split structure. */voidsplit_dump(list)	SPLIT *list;{	int i;	struct part *part;	fprintf(stderr, "npart: %d\n", list->npart);		for (i = 0; i < list->npart; i++) {		part = &list->part[i];		fprintf(stderr, "string[%d]: |%s|\n", i, part->start);		fprintf(stderr, "savec[%d] : |%c|\n", i, part->savec);	}}

⌨️ 快捷键说明

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