mystrtok, strspn, strcspn

/*
自己实现库函数:strtok
*/

#include <stdio.h>
#include <string.h>

char *mystrtok(char *src, char *delim)
{
	char *begin, *end;
	static char *savep = "";

	begin = src ? src : savep;
	begin = begin + strspn(begin, delim);
	if(*begin == '\0'){
		savep = "";
		return NULL;
	}

	end = begin + strcspn(begin, delim);
	if(*end != '\0'){
		*end++ = '\0';
	}
	savep = end;
	return begin;
}


int main(int argc, char *argv[])
{
	char *token, *begin;

	for(begin = argv[1]; (token = mystrtok(begin, argv[2])); begin = NULL ){
	
		printf("token:%s\n", token);
	}




	return 0;
}<pre name="code" class="cpp">














/*
int strspn(const char *, const char *);
strspn函数范例strspn(“abc”, “bcd”),搜索字符串“abc”中
是否有不存在于字符集“bcd”中出现的字符。如„a‟没有出现
在”bcd”中,则函数返回字符串“abc”中„a‟的下标:0,如果
第一个参数代表的字符串中的所有字符都出现在第二个参数
代表的字符串中则函数返回'\0'字符的下标:3。
*/
/*
strcspn函数范例strcspn(“abc”, “bcd”),搜索字符串“abc”
中出现在”bcd”字符集中的字符返回其下标,则函数应该返
回“abc”中„b‟的下标:1;若第一个参数中所有字符都没有
在第二个参数中出现则返回„\0'的下标。
*/


#include <stdio.h>
#include <string.h>
//#include <strlib.h>

int main(void)
{
	int t;
	char str1[20];
	char str2[20];
	gets(str1);
	gets(str2);
	t = strspn(str1, str2);
	printf("strspn:%d\n", t);

	t = strcspn(str1, str2);
	printf("strcspn:%d\n", t);
	return 0;
}

/*
akaedu@akaedu-G41MT-D3:~/lin/722_str$ ./strspn 
abc 
bcd
strspn:0
strcspn:1
akaedu@akaedu-G41MT-D3:~/lin/722_str$ ./strspn 
abc
abc
strspn:3
strcspn:0
akaedu@akaedu-G41MT-D3:~/lin/722_str$ ./strspn 
abc 
bcd
strspn:0
strcspn:1
akaedu@akaedu-G41MT-D3:~/lin/722_str$ ./strspn 
abc
def
strspn:0
strcspn:3

*/

 
 

你可能感兴趣的:(mystrtok, strspn, strcspn)