📄 strtok.c
字号:
/*************************************************************************
*
* Copyright Mentor Graphics Corporation 2002
* All Rights Reserved.
*
* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS
* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS
* SUBJECT TO LICENSE TERMS.
*
*************************************************************************/
/*************************************************************************
* FILE NAME VERSION
*
* strtok.c Nucleus Common Library 1.1
*
* DESCRIPTION
*
* This file contains the implementation of NCL_strtok.
*
* DATA STRUCTURES
*
* None.
*
* FUNCTIONS
*
* NCL_strtok
*
* DEPENDENCIES
*
* ncl.h
* string.h
* nucleus.h
*
************************************************************************/
#define NU_NCL_SOURCE_FILE
#include "ncl\inc\ncl.h"
#include "ncl\inc\string.h"
#include "plus\nucleus.h" /* MMU Support */
#ifdef NU_NO_ANSI
/*************************************************************************
*
* FUNCTION
*
* NCL_strtoul
*
* DESCRIPTION
*
* This function is NOT an ANSI C library function. It is reentrant.
* Strtok considers s1 to be the address of a string pointer,
* pointing to a sequence of zero or more text "tokens", separated
* by spans of one or more characters from the separator string s2.
* The first call should pass the address of a pointer to a token
* string s1, and strtok returns a pointer to the first character
* of the first token. S1 gets updated to point to the remaining
* portion of the token string. Subsequent calls to strtok should
* pass the address of s1, just as with the first call. Since the
* string comes back modified each time, a copy of the original
* string should be made before the first call using the strcpy
* function. The separator string s2 may be different from call to
* call. When there are no more tokens in s1, a zero is returned.
*
* INPUTS
*
* s1 string with tokens and delimiters
* s2 delimiters
*
* OUTPUTS
*
* *s1 updated to point to remaining string - the
* token returned as char*
* (passed by reference)
* char* first char of first token
*
*************************************************************************/
char *NCL_strtok(register char **s1, register const char *s2)
{
register const char *delim=s2; /* pointer to delimiters */
register char *str=*s1; /* working pointer to s1 */
register char *tok=*s1; /* ptr to s1 (returned as ptr to token) */
str += NCL_strspn(*s1, s2); /* strip off leading delimiters */
tok=str; /* move token pointer to new position */
while (*str) /* while str pointer is not null */
{
while (*delim) /* while delim pointer is not null */
{
if (*str==*delim++) /* if char in str matches delimiter */
{
*str=0; /* replace token with null char */
str++; /* increment str for next call */
*s1=str; /* store new pointer position in s1 */
return tok; /* return pointer to token */
}
}
delim=s2; /* reset delimiter pointer to front */
str++; /* increment str for while loop */
}
*s1=str; /* set string to null */
return tok; /* return last token in string */
}
#else /* NU_NO_ANSI */
/*************************************************************************
*
* FUNCTION
*
* NCL_strtoul
*
* DESCRIPTION
*
* Considers s1 to be a string of tokens possibly
* separated by characters from s2. The first time
* this routine is called (with s1 pointing to a string)
* a pointer to the first token in returned.
* The delimiter itself is replaced by a '\0' before
* returning the result. The next time that this routine
* is called (with s1 being 0), the comparison begins
* where the last token ended. A 0 is returned when
* there are no more tokens in string s1.
*
* It will strip off any leading 'token separators'
* from the token string.
*
* This function is an ANSI C library function. It is NOT reentrant.
*
* INPUTS
*
* s1 The string of tokens
* s2 Characters that seperate tokens in s1
*
* OUTPUTS
*
* char* pointer to the first char of first token.
* If there are no more tokens then return 0.
*
*************************************************************************/
char *NCL_strtok(register char *s1, register const char *s2)
{
static char *tok;
register char *p;
register const char *s;
register char c;
if (s1 == 0)
s1 = tok;
s1 += NCL_strspn(s1, s2);
if (*s1 == '\0')
{
return (char *)0;
}
for (p = s1; (c = *p) != 0; ++p)
{
s = s2;
do
{
if (*s == c)
{
*p = '\0';
tok = p+1;
return s1;
}
} while (*s++);
}
tok = p;
return s1;
}
#endif /* NU_NO_ANSI */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -