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

📄 strsub.c

📁 一个很好的分子动力学程序
💻 C
字号:
						/**********************************/						/**  STRING PARSING SUBROUTINES  **/						/**********************************//************************************************************************History************************************************************************//*2 Jan 1997   For unknown reasons, strcmpi() has started to fail on AIX   when strsub.c compiled with O3 option.  Have rewritten   routine to include explicit indexing of input strings   (rather than incrementing char *).  It works now.*//************************************************************************Include Files************************************************************************/#include <stdlib.h>#include <ctype.h>#include "strsub.h"/************************************************************************Defines************************************************************************/#define BOOLEAN int#define TRUE    1#define FALSE   0/************************************************************************Module Variables************************************************************************//*  String holding White Space Characters  *//************************************************************************Local Function Prototypes************************************************************************/void TruncateWhiteSpace (char *);BOOLEAN IsWhiteSpace(char);/************************************************************************Exported Functions************************************************************************//*  PULLS AND RETURNS POINTER TO FIRST TOKEN  */char *strhed (char **tadd)	{   char *head;	char *sep;	char *tail;   tail = *tadd;   /* FIND FIRST NONBLANK CHARACTER  */   while (   (*tail)          && ( (*tail)==' ' || (*tail)=='\t' || (*tail)=='\n' )  )             tail++;   /* FIND NEXT WHITE SPACE CHARCTER  */   head = (sep = tail);   while ((*sep) && (*sep)!=' ' && (*sep)!='\n' && (*sep)!='\t') sep++;   /*  Mark end of leading token  */   tail = sep;   if (*sep)		{ 		*sep = 0;		tail++;		}	/*  Remove leading and trailing whitespace from tail  */	SkipWhiteSpace     (&tail);	TruncateWhiteSpace ( tail);	/*  Save addres of tail  */	*tadd = tail;	/*  return address of first token  */	return head;	}/*  COMPARES TWO STRINGS BUT IGNORES CASE  *//*  RETURNS -1 if a< b                     *//*           0 if a==b                     *//*           1 if a> b                     */int strcmpi (const char *FirstString, const char *SecondString)	{	int  ichar;	char FirstChar;	char SecondChar;	ichar = 0;	do		{		/*  Convert characters to uppercase  */		FirstChar  = toupper(FirstString [ichar]);		SecondChar = toupper(SecondString[ichar]);		/*  Increment ichar  */		ichar++;		}		while (FirstChar==SecondChar && FirstChar!='\0' && SecondChar!='\0');	if (FirstChar<SecondChar)		return -1;	else if (FirstChar>SecondChar)		return  1;	else		return  0;	}int strncmpi (const char *FirstString, const char *SecondString, const int  nchar)	{	int  ichar;	char FirstChar;	char SecondChar;	/*  Special case, no characters checked  */	if (nchar==0)		return 0;	ichar = 0;	do		{		/*  Convert characters to uppercase  */		FirstChar  = toupper(FirstString [ichar]);		SecondChar = toupper(SecondString[ichar]);		/*  Increment ichar  */		ichar++;		}		while 			(			FirstChar==SecondChar && 			FirstChar!='\0' && 			SecondChar!='\0' &&			ichar<nchar			);	if (FirstChar<SecondChar)		return -1;	else if (FirstChar>SecondChar)		return  1;	else		return  0;	}#ifdef OLD_STRCMPIint strcmpi (char *a, char *b) {   int flag;   char inc = 'a' - 'A';   char ta, tb;/*test*/printf ("File %s line %i\n", __FILE__, __LINE__);printf ("a <%s> b <%s>\n", a, b);/*end test*/   do {      ta = *a;      tb = *b;      flag = (ta==tb);      if (!flag) {         if (ta>='A' && ta<='Z')            ta += inc;         if (tb>='A' && tb<='Z')            tb += inc;   ;         flag = (ta==tb);      }   } while (flag && *a++!=0 && *b++!=0);/*test*/printf ("flag = %i\n", flag);/*end test*/   if (flag)      return(0);   if (ta<tb)      return(-1);   return( 1);}#endif/*  PULLS LEADING TOKEN:  EVALUATES AS CONSTANT - RETURNS DOUBLE  */double dblstr (char **s) {	char *t = strhed (s);	if (*t==0)		return (0.0);	else		return (atof(t));}/*  PULLS LEADING TOKEN:  EVALUATES AS CONSTANT - RETURNS INT  */int intstr (char **s) {	char *t = strhed (s);   if (*t==0)      return (0);   else      return (atoi(t));}/*  PULLS LEADING TOKEN:  EVALUATES AS CONSTANT - RETURNS LONG  */long lngstr (char **s) {   char *t = strhed (s);   if (*t==0)      return (0L);   else      return (atol(t));}/*  CONVERTS STRING TO UPPER CASE  */void   upstr   (char   *t   ) {   while (*t!=0) {      *t = toupper(*t);      t++;   }}/*  BREAKS STRING INTO LINES ACCORDING TO ; \n \r  */char *strlin (char **tnext) {   char *head, *tail;   /*  Start string after any leading ; \n \r  */   head = *tnext;   while (*head==';' || *head=='\n' || *head=='\r')      head++;   /*  Find end-of-string OR first line separator ; \n \r  */	tail = head;   while (*tail && *tail!=';' && *tail!='\n' && *tail!='\r')      tail++;   /* Insert null character to convert line end to end-of-string  */   if (*tail) {      *tail=0;		/*  Skip forward to until not ; /n /r  */      tail++;		while (*tail==';' || *tail=='\n' || *tail=='\r') tail++;   }   /*  return pointer to string, and address of next string  */   *tnext = tail;   return head;}/*  Returns True if first non-whitespace characters is in string  */BOOLEAN IsComment (char *InputString, char *CommentChars)   {   char LeadingChar;   int  TestIndex;   /*  Find first non-white space character  */   SkipWhiteSpace (&InputString);   LeadingChar = InputString[0];   /*  Scan list of comment characters to see if leading character belongs  */   TestIndex = 0;   while   (   CommentChars[TestIndex]!='\0' &&   CommentChars[TestIndex]!=LeadingChar   )      TestIndex++;   /*  Return true if matching characters not string terminatore  */   return  CommentChars[TestIndex] != '\0';   }BOOLEAN IsBlank (char *InputString)   {   SkipWhiteSpace (&InputString);   if (InputString[0]=='\0')      return TRUE;   else      return FALSE;   } void SkipWhiteSpace (char **s)   {   while ( IsWhiteSpace(**s) )      (*s)++;   }/*Returns true if next token in String is Token*/BOOLEAN IsFirstToken (char *Token, char *String)	{	int Len;	Len = strlen (Token);	SkipWhiteSpace(&String);	return		!strncmpi(Token,String,Len) && 		(IsWhiteSpace(String[Len]) || String[Len]=='\0');	}/*  Returns next token or quoted string if present  */char *GetQuotedString (char **Input, char QuoteChar)	{   char *head;	char *tail;   tail = *Input;   /* FIND FIRST NONBLANK CHARACTER  */   while (   (*tail)          && ( (*tail)==' ' || (*tail)=='\t' || (*tail)=='\n' )  )             tail++;	/*  Return quoted string if next character is a quote  */	if (*tail==QuoteChar)		{		tail++;		head = tail;		tail = strchr (tail, QuoteChar);		if (NULL==tail)			{			tail = head + strlen(head);			}		/*  Point past quote char  */		else			{			tail++;			}		#if 0		head = strsep (&tail, QuoteCharStr);#endif		}	/*  else return next token (delimited by space, \n or \t)  */	else		{		head = strhed (&tail);		}	/*  Set pointer to remaining string, return pointer to token  */	*Input = tail;	return head;	}/*  Replace double character sequence '\' 'n' with a single new-line character  */void ReplaceSpecialChar (char *src)	{	char *dst   = src;	while (*src!='\0')		{		/*  Replace new line  */		if (*src=='\\' && src[1]=='n')			{			*dst++ = '\n';			src += 2;			}		/*  copy character  */		else			{			if (dst!=src)				*dst = *src;			dst++;			src++;			}		}	*dst = '\0';	}/************************************************************************Local Functions************************************************************************/void TruncateWhiteSpace (char *InputStr)	{	int LastPos;	/*  Got to string end  */	LastPos = strlen(InputStr)-1;	/*  Find first non-blank character  */	while (LastPos>=0 && IsWhiteSpace(InputStr[LastPos]))		{		LastPos--;		}	/*  Mark string end at first character after non-blank  */	InputStr[LastPos+1] = '\0';	}BOOLEAN IsWhiteSpace (char InputChar)	{	return 		(	   InputChar == ' '  ||	   InputChar == '\n' ||	   InputChar == '\t' ||	   InputChar == '\r' ||	   InputChar == '\b' ||	   InputChar == '\f' ||	   InputChar == '\v'		);	}

⌨️ 快捷键说明

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