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

📄 strlib.c

📁 用C语言实现的字符型的菜单界面
💻 C
📖 第 1 页 / 共 3 页
字号:
/*----------------------------------------------------------------------------* * 功    能: 字符串操作库.						      * * 版    本: 1.00							      * * 运行环境: SCO UNIX V3.2.4 以上版本.					      * * 历史记录: 日      期	作  者	备    注				      * *----------------------------------------------------------------------------* *           1999/10/20	赖正兴	创建				      	      * *----------------------------------------------------------------------------* * All rights reserved. Copyright (C) 1999-20001.			      * *----------------------------------------------------------------------------*/#include "strlib.h"/******************************************************************************  * <第一章> 字符串操作函数.                                                   * ******************************************************************************//*----------------------------------------------------------------------------* * Function: SPACE(生成空格). * Argument:  *           int num - 空格数目. * Return  :  *           char * - 指针.                                   *           NULL - 长度小于0或太大. *----------------------------------------------------------------------------*/char *space(int num){	static char space_buf[DATA_LENGTH+1];	static int first_sign=TRUE;	if(first_sign)	{		memset(space_buf,' ',512);		*(space_buf+512)='\0';		first_sign=FALSE;	}	if(num<=0||num>DATA_LENGTH) return("");	return(space_buf+DATA_LENGTH-num);}/*----------------------------------------------------------------------------* * FUNCTION: 删除字符串右边空格和TAB键(str的值要变). * Argument: *           char *str - 字符串. * Return  :  *           指针.                                   *----------------------------------------------------------------------------*/char *rtrim(char *str){	int i;	if( (i=strlen(str)) == 0 )		return(str);	i-=1;	while(i>=0 && (str[i]==' '||str[i]=='\t'))	{		i--;	}	i++;	*(str+i)='\0';	return(str);}/*----------------------------------------------------------------------------* * FUNCTION: 删除字符串左边空格和TAB键(str的值要变). * Argument: *           char *str - 字符串. * Return  :  *           指针.                                   *----------------------------------------------------------------------------*/char *ltrim(char *str){	int i,len;	char tmp[DATA_LENGTH];	if( (len=strlen(str)) == 0 )		return(str);	for(i=0; i<len; i++)	{		if(str[i] != ' ' && str[i] != '\t') break;	}	strcpy(tmp,&str[i]);	strcpy(str,tmp);	return(str);}/*----------------------------------------------------------------------------* * FUNCTION: 删除字符串两边空格和TAB键(str的值要变). * Argument: *           char *str - 字符串. * Return  :  *           指针.                                   *----------------------------------------------------------------------------*/char *trim(char *str){	rtrim(str);	ltrim(str);	return(str);}/*----------------------------------------------------------------------------* * Function: 由分隔符分开的子串总数目. * Argument: *           char *str - 串. *           char ch   - 分隔字符. * Return  :  *           > 0 总数目(1...n). *           = 0 没有匹配项. *----------------------------------------------------------------------------*/int get_item_num(char *str,char ch){	int i,len,num=0;	len=strlen(str);	for(i=0; i< len; i++)		if(str[i] == ch) num++;	if(num > 0) num++;	return(num);}/*----------------------------------------------------------------------------* * Function: 读取分隔符分开的第几个子串. * Argument: *           char *str - 源串. *           char ch   - 分隔字符. *           int  num  - 第几个(0..n). * Return  : *           结果子串. *           NULL - 超过子串数目或没有匹配项. *----------------------------------------------------------------------------*/char *get_item(char *str,char ch,int num){	int i,total_num;	char *p,substr[DATA_LENGTH];	if( (total_num=get_item_num(str,ch)) == 0 )	{		return(NULL);	}	if(num >= total_num)	{		return(NULL);	}	i=0; 	p=(char *)str;	while(i++ < num)	{		while(*p++ != ch);	}	i=0;	while(*p !=ch && *p !='\0')	{		substr[i++] = *p++;	}	substr[i]='\0';	return(substr);}/*----------------------------------------------------------------------------* * Function: 检查字串中,整数部分的有效位数. * Argument:  *           char *numbuf - 字串. * Return  :  *           >= 0 整数部分的位数. *           < 0 Error. *----------------------------------------------------------------------------*/int check_intlen(char *numbuf){	char *tmpbuf;	int i,len;	len=strlen(numbuf);	if( (tmpbuf=(char *)malloc(len+5)) == NULL )		return -1;	strcpy(tmpbuf,numbuf);	i=is_in(tmpbuf,'.');	if(i > -1)	{		tmpbuf[i] = '\0';	}	rtrim(tmpbuf);	ltrim(tmpbuf);	if(is_in("0123456789-",tmpbuf[0]) == -1)	{		tmpbuf[0]='\0';	}	if(tmpbuf[0] == '-')	{		tmpbuf[0]=' ';		rtrim(tmpbuf);	}	i=0;	while( tmpbuf[i] !='\0' && tmpbuf[i] <='9' && tmpbuf[i] >='0')		i++;	tmpbuf[i]='\0';	len=strlen(tmpbuf);	free(tmpbuf);	return(len);}/*----------------------------------------------------------------------------* * Function: 由分隔符分开的子串最大长度. * Argument: *           char *str - 串. *           char ch   - 分隔字符. * Return  : *           >= 0 最大长度. *           < 0  不存在. *----------------------------------------------------------------------------*/int get_item_maxlen(char *str,char ch){	char *p,*q,*strchr();	int i,j,len,maxlen;	if(strchr(str,ch) == NULL) /* not found ch */		return(-1);	len=strlen(str); 	j=maxlen=0;	for(i=0; i<len; i++)	{		if(str[i] == ch)		{			if(j > maxlen)			{				maxlen=j;			}			j=0;		}		else		{			j++;		}	}	if(j > maxlen)		maxlen=j;	return(maxlen);}/*----------------------------------------------------------------------------* * Function: 检查字符是否在字符串中出现,并且返回序号(0...N). * Argument: *           char *str - 字符串. *           char c - 字符. * Return  : *           >= 0 if in. *           = -1 if not in. *----------------------------------------------------------------------------*/int is_in(char *str,char ch){	char *ptr,*strchr();	if((ptr=strchr(str,ch)) == NULL)		return(-1);	return(ptr-str);}/*----------------------------------------------------------------------------* * FUNCTION: 求字符在字符串中出现的次数(1...N). * Argument: *           char *str - 字符串. *           char c - 字符. * Return  : *           > 0 if in. *           = 0 if not in. *----------------------------------------------------------------------------*/int count_chnum(char *str,char ch){	int count=0,i,len;	len=strlen(str);	for(i=0; i < len; i++)		if(str[i] == ch) count++;	return(count);}/*----------------------------------------------------------------------------* * Function: 检查字符串 substr 是否为字符串 str 的子串,并且返回序号. * Argument: *           char *substr - 子串. *           char *str - 字符串. * Return  :  *           0...n  index on str,if found. *           -1     if not found. *----------------------------------------------------------------------------*/index_on_str(char *substr,char *str){	int len;	char *s,*t,*strchr();	/****char *strchr(char *str,char ch) 函数用法:     函数返回字符ch在串str中第一次出现的指针.      如果没发现匹配,则函数返回空指针NULL.****/	s=(char *)substr; 	t=(char *)str; 	len = strlen(substr);	while ((t = strchr(t, *s)) != NULL)	{		if (strncmp(s, t, len) == 0)			return(t-str);		/* found */		t++;	}	return(-1);}/*----------------------------------------------------------------------------* * Function: <字串>在<字串表>中序号(0...N). * Argument: *           char *str - 字符串. *           char **strtab - 字符串表. * Return  : *           0...n  index on strtab,if found. *           -1     if not found. * Notes   : 字串表 以 '\0' 串结束. *----------------------------------------------------------------------------*/index_on_strtab(char *str,char **strtab){	char **mp;	for (mp = strtab; *mp; ++mp)	{		if (index_on_str(*mp, str) != -1)		{			return(mp-strtab);	/* index on strtab(0...n) */		}	}	return(-1);}/*----------------------------------------------------------------------------* * Function: Ring Bell. * Argument: *           int num - Bell numbers. * Return  : None. *----------------------------------------------------------------------------*/void beeps(int num){	while(num--)	{#if 0		beep();#else		putchar('\7');#endif	}}/*----------------------------------------------------------------------------* * FUNCTION: 连接若干子串(最后一个串之后,以NULL结束) * Argument: *           char *strbuf - 第一个字符串,连接后的串返回到该串中. *           多个字串,以NULL结束. * Return  :  *           None. *----------------------------------------------------------------------------*/strcatm(strbuf,va_alist)char *strbuf;va_dcl{	va_list	arg_ptr;	char *str_ptr;	va_start(arg_ptr);	while((str_ptr=va_arg(arg_ptr,char *))!=NULL)		strcat(strbuf,str_ptr);	va_end(arg_ptr);}/*----------------------------------------------------------------------------* * FUNCTION: 截取子字符串(string不变).  * Argument: *           char *string - 字符串. *           int start - 开始位置. *           int number - 截取长度. * Return  :  *           char * - 子字符串指针.                                   *----------------------------------------------------------------------------*/char *substr(char *string,int start,int number){	static char buffer[DATA_LENGTH];	int length;	length=strlen(string);	if(start<0||number<0||number>511||start+number>length)		return("");	memcpy(buffer,string+start,number);	*(buffer+number)='\0';	return(buffer);}/*----------------------------------------------------------------------------* * FUNCTION: 反转字串(string要改变), 如:"1234" -> "4321". * Argument: *           char *string - 字符串. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *strrev(char *string){	long int i,len;	unsigned char c;	len=strlen(string)-1;	for(i=0;i<=len;i++)	{			if(i>=len-i) break;		c=*(string+i);		*(string+i)=*(string+len-i);		*(string+len-i)=c;	}	return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 把string2插入string1中. * Argument: *           char *string1 - 字符串1. *           int start - 开始位置. *           int number - 长度. *           char *string2 - 字符串2. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *ins_str(char *string1,int start,int number,char *string2){	int len,cunt;	len=strlen(string2);	if(number>len)		number=len;	len=strlen(string1);	for(cunt=len;cunt>=start;cunt--)		*(string1+cunt+number)=*(string1+cunt);	for(cunt=0;cunt<number;cunt++)		*(string1+start+cunt)=*(string2+cunt);	return(string1);}/*----------------------------------------------------------------------------* * FUNCTION: 把string中的字符c1替换为c2. * Argument: *           char *string - 字符串. *           char *c1 - 字符1. *           char *c2 - 字符2. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *strcce(char *string,char c1,char c2){	int i,len;	len=strlen(string);	for(i=0;i<len;i++)	{		if(string[i] == c1)			string[i]=c2;	}	return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 字符删除. * Argument: *           char *string - 字符串. *           char *c - 删除的字符. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *strcd(char *string,char c){	int i,j,len;	char *strbuf;	len=strlen(string);	strbuf=(char *)malloc(len+1);	for(i=0,j=0; i<len;i++)	{		if(string[i] != c)			strbuf[j++]=string[i];	}	strbuf[j]='\0';	strcpy(string,strbuf);	free(strbuf);	return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 把字串(可以转换的字符)转成大写. * Argument: *           char *string - 字符串. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *str_toupper(char *string){	char *ptr;	int  cunt,len;	len=strlen(string);	ptr=string;	for(cunt=0;cunt<len;cunt++)	{		*ptr++=my_toupper(*ptr);	}	return(string);}/*----------------------------------------------------------------------------* * FUNCTION: 把字串(可以转换的字符)转成小写 * Argument: *           char *string - 字符串.

⌨️ 快捷键说明

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