9.函数名: strchr
功 能: 在一个串中查找给定字符的第一个匹配之处
用 法: char *strchr(char *str, char c);
程序例:
int main(void)
{
char string[17];
char *ptr, c = 'i';
strcpy(string, "This is a string");
ptr = strchr(string, c);
if (ptr)
printf("The character %c is at position: %d/n", c, ptr-string);
else
printf("The character was not found/n");
return 0;
}
输出:
The character r is at position: 2
实现:
char * __cdecl strchr (const char * string,int ch)
{
while (*string && *string != (char)ch)
string++;
if (*string == (char)ch)
return((char *)string);
return(NULL);
}
10.函数名: strrchr
功 能: 返回指定字符在串中最后出现位置的指针,不存在返回NULL
用 法: char *strrchr(char *str, char c);
程序例:
int main(void)
{
char string[17];
char *ptr, c = 'i’;
strcpy(string, "This is a string");
ptr = strrchr(string, c);
if (ptr)
printf("The character %c is at position: %d/n", c, ptr-string);
else
printf("The character was not found/n");
return 0;
}
输出:
The character r is at position: 13
实现:
char * __cdecl strrchr (const char * string,int ch)
{
char *start = (char *)string;
while (*string++) /* find end of string */
;
/* search towards front */
while (--string != start && *string != (char)ch)
;
if (*string == (char)ch) /* char found ? */
return( (char *)string );
return(NULL);
}
11.函数名: strstr
功 能: 返回str2在str1中第一次出现的位置指针,没有则返回null
用 法: char *strstr(char *str1, char *str2);
程序例:
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
ptr = strstr(str1, str2);
printf("The substring is: %sn", ptr);
return 0;
}
输出:
The substring is: national
实现:
char * __cdecl strstr (const char * str1,const char * str2)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
12.函数名: strspn
功 能: 返回str1中第一个不在str2中的字符的位置
用 法: int strspn(char *str1, char *str2);
程序例:
int main(void)
{
char *string1 = "12348567890";
char *string2 = "1234C8";
int length;
length = strspn(string1, string2);
printf("Character where strings differ is at position %d/n", length);
return 0;
}
输出:
Character where strings differ is at position 5
size_t __cdecl strspn ( const char * string,const char * control)
{
const unsigned char *str = string;
const unsigned char *ctrl = control;
unsigned char map[32];
int count;
/* Clear out bit map */
for (count=0; count<32; count++)
map[count] = 0;
/* Set bits in control map */
while (*ctrl)
{
map[*ctrl >> 3] |= (1 << (*ctrl & 7));
ctrl++;
}
/* 1st char NOT in control map stops search */
if (*str)
{
count=0;
while (map[*str >> 3] & (1 << (*str & 7)))
{
count++;
str++;
}
return(count);
}
return(0);
}
12.函数名: strcspn
功 能: 返回str1中第一个在str2中出现的字符在str1中的位置
用 法: int strcspn(char *str1, char *str2);
程序例:
int main(void)
{
char *string1 = "1234567890";
char *string2 = "747DC8";
int length;
length = strcspn(string1, string2);
printf("Character where strings intersect is at position %d/n", length);
return 0;
}
输出:
Character where strings intersect is at position 3
实现:
size_t __cdecl strcspn (const char * string,const char * control)
{
const unsigned char *str = string;
const unsigned char *ctrl = control;
unsigned char map[32];
int count;
/* Clear out bit map */
for (count=0; count<32; count++)
map[count] = 0;
/* Set bits in control map */
while (*ctrl)
{
map[*ctrl >> 3] |= (1 << (*ctrl & 7));
ctrl++;
}
/* 1st char in control map stops search */
count=0;
map[0] |= 1; /* null chars not considered */
while (!(map[*str >> 3] & (1 << (*str & 7))))
{
count++;
str++;
}
return(count);
}
13.函数名: strpbrk
功 能: 返回str1中第一个在str2中出现的字符的指针
用 法: char *strpbrk(char *str1, char *str2);
程序例:
int main(void)
{
char *string1 = "abcdefghijklmnopqrstuvwxyz";
char *string2 = "onm";
char *ptr;
ptr = strpbrk(string1, string2);
if (ptr)
printf("strpbrk found first character: %cn", *ptr);
else
printf("strpbrk didn't find character in setn");
return 0;
}
输出:
strpbrk found first character: m
实现:
char * strpbrk (const char * string,const char * control)
{
const unsigned char *str = string;
const unsigned char *ctrl = control;
unsigned char map[32];
int count;
/* Clear out bit map */
for (count=0; count<32; count++)
map[count] = 0;
/* Set bits in control map */
while (*ctrl)
{
map[*ctrl >> 3] |= (1 << (*ctrl & 7));
ctrl++;
}
/* 1st char in control map stops search */
while (*str)
{
if (map[*str >> 3] & (1 << (*str & 7)))
return((char *)str);
str++;
}
return(NULL);
}
14.函数名: strtok
功 能: 分解字符串为一组子字符串,str2为分隔符
用 法: char *strtok(char *str1, char *str2);
程序例:
int main(void)
{
char input[16] = "abc,d";
char *p;
/* strtok places a NULL terminator
in front of the token, if found */
p = strtok(input, ",");
if (p) printf("%sn", p);
/* A second call to strtok using a NULL
as the first parameter returns a pointer
to the character following the token */
p = strtok(NULL, ",");
if (p) printf("%sn", p);
return 0;
}
输出:
abc
d
实现:
char * strtok (char * string,const char * control)
{
unsigned char *str;
const unsigned char *ctrl = control;
unsigned char map[32];
int count;
static char *nextoken;
/* Clear control map */
for (count = 0; count < 32; count++)
map[count] = 0;
/* Set bits in delimiter table */
do {
map[*ctrl >> 3] |= (1 << (*ctrl & 7));
} while (*ctrl++);
/* Initialize str. If string is NULL, set str to the saved
* pointer (i.e., continue breaking tokens out of the string
* from the last strtok call) */
if (string)
str = string;
else
str = nextoken;
/* Find beginning of token (skip over leading delimiters). Note that
* there is no token iff this loop sets str to point to the terminal
* null (*str == '/0') */
while ( (map[*str >> 3] & (1 << (*str & 7))) && *str )
str++;
string = str;
/* Find the end of the token. If it is not the end of the string,
* put a null there. */
for ( ; *str ; str++ )
if ( map[*str >> 3] & (1 << (*str & 7)) ) {
*str++ = '/0';
break;
}
/* Update nextoken (or the corresponding field in the per-thread data
* structure */
nextoken = str;
/* Determine if a token has been found. */
if ( string == str )
return NULL;
else
return string;
}
15.函数名: strset
功 能: 将一个串中的所有字符都设为指定字符
用 法: char *strset(char *str, char c);
程序例:
int main(void)
{
char string[10] = "123456789";
char symbol = 'c';
printf("Before strset(): %sn", string);
strset(string, symbol);
printf("After strset(): %sn", string);
return 0;
}
输出:
Before strset(): 123456789
After strset(): ccccccccc
代码:
char * strset (char * string, int val )
{
char *start = string;
while (*string)
*string++ = (char)val;
return(start);
}
16.函数名: strnset
功 能: 将一个串中的前n个字符设为指定字符
用 法: char *strnset(char *str, char ch, unsigned n);
程序例:
int main(void)
{
char string[] = "abcdefghijklmnopqrstuvwxyz";
char letter = 'x';
printf("string before strnset: %s/n", string);
strnset(string, letter, 13);
printf("string after strnset: %s/n", string);
return 0;
}
输出:
string before strnset: abcdefghijklmnopqrstuvwxyz
string after strnset: xxxxxxxxxxxxxnopqrstuvwxyz
代码:
char * strnset (char * string, int val, size_t count )
{
char *start = string;
while (count-- && *string)
*string++ = (char)val;
return(start);
}
17.函数名: strrev
功 能: 串倒转
用 法: char *strrev(char *str);
程序例:
int main(void)
{
char forward[] = "string";
printf("Before strrev(): %s/n", forward);
strrev(forward);
printf("After strrev(): %s/n", forward);
return 0;
}
输出:
Before strrev(): string
After strrev(): gnirts
代码:
char * strrev (char * string)
{
char *start = string;
char *left = string;
char ch;
while (*string++) /* find end of string */
;
string -= 2;
while (left < string)
{
ch = *left;
*left++ = *string;
*string-- = ch;
}
return(start);
}
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/xinghui0001/archive/2010/10/10/5931314.aspx