$200 + 200 + 200 ....等你拿,高价求C语言常用串函数的程序原形 ( 积分: 200 )

X

xanadu

Unregistered / Unconfirmed
GUEST, unregistred user!
每个100 - 200分
函数名: strcpy 200分
功 能: 串拷贝
用 法: char *strcpy(char *str1, char *str2);

函数名: strstr 200分
功 能: 在串中查找指定字符串的第一次出现
用 法: char *strstr(char *str1, char *str2);

函数名: strncmp 50分
功 能: 串比较
用 法: int strncmp(char *str1, char *str2, int maxlen);

函数名: strrchr 50分
功 能: 在串中查找指定字符的最后一个出现
用 法: char *strrchr(char *str, char c);

函数名: strrev 50分
功 能: 串倒转
用 法: char *strrev(char *str);

等等等等,越多越好,截止日期:2005年3月11日晚6点
 
每个100 - 200分
函数名: strcpy 200分
功 能: 串拷贝
用 法: char *strcpy(char *str1, char *str2);

函数名: strstr 200分
功 能: 在串中查找指定字符串的第一次出现
用 法: char *strstr(char *str1, char *str2);

函数名: strncmp 50分
功 能: 串比较
用 法: int strncmp(char *str1, char *str2, int maxlen);

函数名: strrchr 50分
功 能: 在串中查找指定字符的最后一个出现
用 法: char *strrchr(char *str, char c);

函数名: strrev 50分
功 能: 串倒转
用 法: char *strrev(char *str);

等等等等,越多越好,截止日期:2005年3月11日晚6点
 
函数名: sprintf 50分
功 能: 格式化串
用 法: int sprintf(char *, const char *, ...);
 
函数名: strlen 100分
功 能: 计算串长度
用 法: size_t __cdecl strlen(const char *);
 
函数名: strncpy 200分
功 能: 串拷贝(指定拷贝个数)
用 法: char * __cdecl strncpy(char *, const char *, size_t);
 
看他源代码了.
 
int puts(condt char*s)
int gets(char*string)
size_t strlen(const char*s)
C++里的,没有具体学过C,你看看是不是!
 
要C语言实现的程序,大家快点拿分吧,都很简单的。
 
同样函数原型的实现程序,早回答者早得积分,晚回答者只有鼓励分10分
 
/* STRSTR.C */
#include <string.h>
#include <stdio.h>
char str[] = "lazy";
char string[] = "The quick browndo
g jumps over the lazy fox";
char fmt1[] = " 1 2 3 4 5";
char fmt2[] = "12345678901234567890123456789012345678901234567890";
int findstr(char *str1, char *str2)
{
int i,j,str1_len,str2_len;
int ok;
int findstr=0;
str1_len = strlen(str1);
str2_len = strlen(str2);
j = str1_len-str2_len;
if (str1_len<str2_len)
return -1;
else
{
for(i=0;i<=j;i++)
{
ok = memcmp(&str1,str2,str2_len);
if (ok==0)
{
findstr = 1;
break;
}
}
}
if (findstr==0)
return -1;
else
return i+1;
}
void main()
{
int result;
printf( "String to be searched:/n/t%s/n", string );
printf( "/t%s/n/t%s/n/n", fmt1, fmt2 );
result = findstr( string, str );
if( result != -1 )
printf( "%s found at position %d/n/n", str, result );
else
printf( "%s not found/n", str );
}
 
/*strcpy.c*/
#include <string.h>
#include <stdio.h>

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

char *strcpy2(char *str1, char *str2)
{
int j;
int len;
j=strlen(str2);
len = j;
memset(str1,0x00,j+1);
memcpy(str1,str2,len);
return str1;
}
int main(void)
{
char string[10];
char *str1 = "abcdefghi";

strcpy2(string, str1);
printf("%s/n", string);
return 0;
}
 
函数名: stpcpy
功 能: 拷贝一个字符串到另一个
用 法: char *stpcpy(char *destin, char *source);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];

char *str1 = "abcdefghi";

stpcpy(string, str1);

printf("%s/n", string);

return 0;

}



函数名: strcat
功 能: 字符串拼接函数
用 法: char *strcat(char *destin, char *source);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char destination[25];

char *blank = " ", *c = "C++", *Borland = "Borland";

strcpy(destination, Borland);

strcat(destination, blank);

strcat(destination, c);

printf("%s/n", destination);

return 0;

}



函数名: strchr
功 能: 在一个串中查找给定字符的第一个匹配之处/
用 法: char *strchr(char *str, char c);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[15];

char *ptr, c = 'r';

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;

}



函数名: strcmp
功 能: 串比较
用 法: int strcmp(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

int ptr;

ptr = strcmp(buf2, buf1);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

else

printf("buffer 2 is less than buffer 1/n");

ptr = strcmp(buf2, buf3);

if (ptr > 0)
printf("buffer 2 is greater than buffer 3/n");

else

printf("buffer 2 is less than buffer 3/n");

return 0;

}



函数名: strncmpi
功 能: 将一个串中的一部分与另一个串比较, 不管大小写
用 法: int strncmpi(char *str1, char *str2, unsigned maxlen);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";

int ptr;

ptr = strcmpi(buf2, buf1);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

if (ptr < 0)
printf("buffer 2 is less than buffer 1/n");

if (ptr == 0)
printf("buffer 2 equals buffer 1/n");

return 0;

}



函数名: strcpy
功 能: 串拷贝
用 法: char *strcpy(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];

char *str1 = "abcdefghi";

strcpy(string, str1);

printf("%s/n", string);

return 0;

}



函数名: strcspn
功 能: 在串中查找第一个给定字符集内容的段
用 法: int strcspn(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
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;

}



函数名: strdup
功 能: 将串拷贝到新建的位置处
用 法: char *strdup(char *str);

程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *dup_str, *string = "abcde";

dup_str = strdup(string);

printf("%s/n", dup_str);

free(dup_str);

return 0;

}



函数名: stricmp
功 能: 以大小写不敏感方式比较两个串
用 法: int stricmp(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";

int ptr;

ptr = stricmp(buf2, buf1);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

if (ptr < 0)
printf("buffer 2 is less than buffer 1/n");

if (ptr == 0)
printf("buffer 2 equals buffer 1/n");

return 0;

}


函数名: strerror
功 能: 返回指向错误信息字符串的指针
用 法: char *strerror(int errnum);

程序例:
#include <stdio.h>
#include <errno.h>
int main(void)
{
char *buffer;

buffer = strerror(errno);

printf("Error: %s/n", buffer);

return 0;

}



函数名: strcmpi
功 能: 将一个串与另一个比较, 不管大小写
用 法: int strcmpi(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";

int ptr;

ptr = strcmpi(buf2, buf1);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

if (ptr < 0)
printf("buffer 2 is less than buffer 1/n");

if (ptr == 0)
printf("buffer 2 equals buffer 1/n");

return 0;

}



函数名: strncmp
功 能: 串比较
用 法: int strncmp(char *str1, char *str2, int maxlen);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";

int ptr;

ptr = strncmp(buf2,buf1,3);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

else

printf("buffer 2 is less than buffer 1/n");

ptr = strncmp(buf2,buf3,3);

if (ptr > 0)
printf("buffer 2 is greater than buffer 3/n");

else

printf("buffer 2 is less than buffer 3/n");

return(0);

}


函数名: strncmpi
功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写
用 法: int strncmpi(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBBccc", *buf2 = "bbbccc";

int ptr;

ptr = strncmpi(buf2,buf1,3);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

if (ptr < 0)
printf("buffer 2 is less than buffer 1/n");

if (ptr == 0)
printf("buffer 2 equals buffer 1/n");

return 0;

}


函数名: strncpy
功 能: 串拷贝
用 法: char *strncpy(char *destin, char *source, int maxlen);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];

char *str1 = "abcdefghi";

strncpy(string, str1, 3);

string[3] = '/0';

printf("%s/n", string);

return 0;

}


函数名: strnicmp
功 能: 不注重大小写地比较两个串
用 法: int strnicmp(char *str1, char *str2, unsigned maxlen);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBBccc", *buf2 = "bbbccc";

int ptr;

ptr = strnicmp(buf2, buf1, 3);

if (ptr > 0)
printf("buffer 2 is greater than buffer 1/n");

if (ptr < 0)
printf("buffer 2 is less than buffer 1/n");

if (ptr == 0)
printf("buffer 2 equals buffer 1/n");

return 0;

}



函数名: strnset
功 能: 将一个串中的所有字符都设为指定字符
用 法: char *strnset(char *str, char ch, unsigned n);

程序例:
#include <stdio.h>
#include <string.h>
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;

}


函数名: strpbrk
功 能: 在串中查找给定字符集中的字符
用 法: char *strpbrk(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string1 = "abcdefghijklmnopqrstuvwxyz";

char *string2 = "onm";

char *ptr;

ptr = strpbrk(string1, string2);

if (ptr)
printf("strpbrk found first character: %c/n", *ptr);

else

printf("strpbrk didn't find character in set/n");

return 0;

}



函数名: strrchr
功 能: 在串中查找指定字符的最后一个出现
用 法: char *strrchr(char *str, char c);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[15];

char *ptr, c = 'r';

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;

}



函数名: strrev
功 能: 串倒转
用 法: char *strrev(char *str);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *forward = "string";

printf("Before strrev(): %s/n", forward);

strrev(forward);

printf("After strrev(): %s/n", forward);

return 0;

}

函数名: strset
功 能: 将一个串中的所有字符都设为指定字符
用 法: char *strset(char *str, char c);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10] = "123456789";

char symbol = 'c';

printf("Before strset(): %s/n", string);

strset(string, symbol);

printf("After strset(): %s/n", string);

return 0;

}



函数名: strspn
功 能: 在串中查找指定字符集的子集的第一次出现
用 法: int strspn(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *string1 = "1234567890";

char *string2 = "123DC8";

int length;

length = strspn(string1, string2);

printf("Character where strings differ is at position %d/n", length);

return 0;

}


函数名: strstr
功 能: 在串中查找指定字符串的第一次出现
用 法: char *strstr(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;

ptr = strstr(str1, str2);

printf("The substring is: %s/n", ptr);

return 0;

}


函数名: strtod
功 能: 将字符串转换为double型值
用 法:do
uble strtod(char *str, char **endptr);

程序例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char input[80], *endptr;

do
uble value;

printf("Enter a floating point number:");

gets(input);

value = strtod(input, &amp;
endptr);

printf("The string is %s the number is %lf/n", input, value);

return 0;

}



函数名: strtok
功 能: 查找由在第二个串中指定的分界符分隔开的单词
用 法: char *strtok(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
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("%s/n", 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("%s/n", p);

return 0;

}



函数名: strtol
功 能: 将串转换为长整数
用 法: long strtol(char *str, char **endptr, int base);

程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "87654321", *endptr;

long lnumber;

/* strtol converts string to long integer */
lnumber = strtol(string, &amp;
endptr, 10);

printf("string = %s long = %ld/n", string, lnumber);

return 0;

}

函数名: strupr
功 能: 将串中的小写字母转换为大写字母
用 法: char *strupr(char *str);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

/* converts string to upper case characters */
ptr = strupr(string);

printf("%s/n", ptr);

return 0;

}



函数名: swab
功 能: 交换字节
用 法: void swab (char *from, char *to, int nbytes);

程序例:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char source[15] = "rFna koBlrna d";

char target[15];

int main(void)
{
swab(source, target, strlen(source));

printf("This is target: %s/n", target);

return 0;

}
 
只供参考
 
/*
FUNCTION
<<strcat>>---concatenate strings
INDEX
strcat
ANSI_SYNOPSIS
#include <string.h>
char *strcat(char *<[dst]>, const char *<[src]>);
TRAD_SYNOPSIS
#include <string.h>
char *strcat(<[dst]>, <[src]>)
char *<[dst]>;
char *<[src]>;
DESCRIPTION
<<strcat>> appends a copy of the string pointed to by <[src]>
(including the terminating null character) to the end of the
string pointed to by <[dst]>. The initial character of
<[src]> overwrites the null character at the end of <[dst]>.
RETURNS
This function returns the initial value of <[dst]>
PORTABILITY
<<strcat>> is ANSI C.
<<strcat>> requires no supporting OS subroutines.
QUICKREF
strcat ansi pure
*/
#include <string.h>
#include <limits.h>
/* Nonzero if X is aligned on a "long" boundary. */
#define ALIGNED(X) /
(((long)X &amp;
(sizeof (long) - 1)) == 0)
#if LONG_MAX == 2147483647L
#define DETECTNULL(X) (((X) - 0x01010101) &amp;
~(X) &amp;
0x80808080)
#else
#if LONG_MAX == 9223372036854775807L
/* Nonzero if X (a long int) contains a NULL byte. */
#define DETECTNULL(X) (((X) - 0x0101010101010101) &amp;
~(X) &amp;
0x8080808080808080)
#else
#error long int is not a 32bit or 64bit type.
#endif
#endif
#ifndef DETECTNULL
#error long int is not a 32bit or 64bit byte
#endif

/*SUPPRESS 560*/
/*SUPPRESS 530*/
char *
_DEFUN (strcat, (s1, s2),
char *s1 _AND
_CONST char *s2)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
char *s = s1;
while (*s1)
s1++;
while (*s1++ = *s2++)

return s;
#else
char *s = s1;

/* Skip over the data in s1 as quickly as possible. */
if (ALIGNED (s1))
{
unsigned long *aligned_s1 = (unsigned long *)s1;
while (!DETECTNULL (*aligned_s1))
aligned_s1++;
s1 = (char *)aligned_s1;
}
while (*s1)
s1++;
/* s1 now points to the its trailing null character, we can
just use strcpy todo
the work for us now.
?!? We might want to just include strcpy here.
Also, this will cause many more unaligned string copies because
s1 is much less likely to be aligned. Ido
n't know if its worth
tweaking strcpy to handle this better. */
strcpy (s1, s2);

return s;
#endif /* not PREFER_SIZE_OVER_SPEED */
}
 
/*
FUNCTION
<<strchr>>---search for character in string
INDEX
strchr
ANSI_SYNOPSIS
#include <string.h>
char * strchr(const char *<[string]>, int <[c]>);
TRAD_SYNOPSIS
#include <string.h>
char * strchr(<[string]>, <[c]>);
char *<[string]>;
int *<[c]>;
DESCRIPTION
This function finds the first occurence of <[c]> (converted to
a char) in the string pointed to by <[string]> (including the
terminating null character).
RETURNS
Returns a pointer to the located character, or a null pointer
if <[c]>do
es not occur in <[string]>.
PORTABILITY
<<strchr>> is ANSI C.
<<strchr>> requires no supporting OS subroutines.
QUICKREF
strchr ansi pure
*/
#include <string.h>
#include <bitblock.h>
char *
_DEFUN (strchr, (s1, i),
_CONST char *s1 _AND
int i)
{
_CONST unsigned char *s = (_CONST unsigned char *)s1;
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
unsigned char c = (unsigned int)i;
while (*s &amp;&amp;
*s != c)
{
s++;
}
if (*s != c)
{
s = NULL;
}
return (char *) s;
#else
unsigned char c = (unsigned char)i;
unsigned long mask,j;
unsigned long *aligned_addr;
if (!UNALIGNED (s))
{
mask = 0;
for (j = 0;
j < LBLOCKSIZE;
j++)
mask = (mask << 8) | c;
aligned_addr = (unsigned long*)s;
while (!DETECTNULL (*aligned_addr) &amp;&amp;
!DETECTCHAR (*aligned_addr, mask))
aligned_addr++;
/* The block of bytes currently pointed to by aligned_addr
contains either a null or the target char, or both. We
catch it using the bytewise search. */
s = (unsigned char*)aligned_addr;
}
while (*s &amp;&amp;
*s != c)
s++;
if (*s == c)
return (char *)s;
return NULL;
#endif /* not PREFER_SIZE_OVER_SPEED */
}
 
/*
FUNCTION
<<strcmp>>---character string compare

INDEX
strcmp
ANSI_SYNOPSIS
#include <string.h>
int strcmp(const char *<[a]>, const char *<>);
TRAD_SYNOPSIS
#include <string.h>
int strcmp(<[a]>, <>)
char *<[a]>;
char *<>;
DESCRIPTION
<<strcmp>> compares the string at <[a]> to
the string at <>.
RETURNS
If <<*<[a]>>> sorts lexicographically after <<*<>>>,
<<strcmp>> returns a number greater than zero. If the two
strings match, <<strcmp>> returns zero. If <<*<[a]>>>
sorts lexicographically before <<*<>>>, <<strcmp>> returns a
number less than zero.
PORTABILITY
<<strcmp>> is ANSI C.
<<strcmp>> requires no supporting OS subroutines.
QUICKREF
strcmp ansi pure
*/
#include <string.h>
#include <limits.h>
/* Nonzero if either X or Y is not aligned on a "long" boundary. */
#define UNALIGNED(X, Y) /
(((long)X &amp;
(sizeof (long) - 1)) | ((long)Y &amp;
(sizeof (long) - 1)))
/* DETECTNULL returns nonzero if (long)X contains a NULL byte. */
#if LONG_MAX == 2147483647L
#define DETECTNULL(X) (((X) - 0x01010101) &amp;
~(X) &amp;
0x80808080)
#else
#if LONG_MAX == 9223372036854775807L
#define DETECTNULL(X) (((X) - 0x0101010101010101) &amp;
~(X) &amp;
0x8080808080808080)
#else
#error long int is not a 32bit or 64bit type.
#endif
#endif
#ifndef DETECTNULL
#error long int is not a 32bit or 64bit byte
#endif
int
_DEFUN (strcmp, (s1, s2),
_CONST char *s1 _AND
_CONST char *s2)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
while (*s1 != '/0' &amp;&amp;
*s1 == *s2)
{
s1++;
s2++;
}
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
#else
unsigned long *a1;
unsigned long *a2;
/* If s1 or s2 are unaligned, then
compare bytes. */
if (!UNALIGNED (s1, s2))
{
/* If s1 and s2 are word-aligned, compare them a word at a time. */
a1 = (unsigned long*)s1;
a2 = (unsigned long*)s2;
while (*a1 == *a2)
{
/* To get here, *a1 == *a2, thus if we find a null in *a1,
then
the strings must be equal, so return zero. */
if (DETECTNULL (*a1))
return 0;
a1++;
a2++;
}
/* A difference was detected in last few bytes of s1, so search bytewise */
s1 = (char*)a1;
s2 = (char*)a2;
}
while (*s1 != '/0' &amp;&amp;
*s1 == *s2)
{
s1++;
s2++;
}
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
#endif /* not PREFER_SIZE_OVER_SPEED */
}
 
全部函数原码大全。
http://asp.6to23.com/fush/strfunc.rar
 
不错,非常感谢。
 

Similar threads

S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
779
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
645
import
I
顶部