C++常用字符串函数

http://womendu.iteye.com/blog/1218155

函数名: 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); 
看Asic码,str1>str2,返回值 > 0;两串相等,返回0
程序例:

#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型值 
用 法: double strtod(char *str, char **endptr); 
程序例:

#include <stdio.h> 
#include <stdlib.h>

int main(void) 

char input[80], *endptr; 
double value;

printf("Enter a floating point number:"); 
gets(input); 
value = strtod(input, &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, &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; 
}

常用函数源码

很多人认为C语言中的难点是指针,对指针的理解直接关系到所编程序的好坏,所以, 
在这里列举了一些C编译器通常都有的标准函数的源代码,看过它们,就能对指针和字符串 
有所了解了. 
1. strlen(),计算字符串长度 
int strlen(const char string) 

int i=0; 
while(string[i]) i++; 
return i; 

2. strcpy(), 字符串拷贝. 
char *strcpy(char *destination, const char *source) 

while(*destinaton++=*source++); 
return (destination-1); 

3. strcat(), 字符串的连接. 
char *strcat(char *target,const char *source) 

char *original=target; 
while(*target) target++; // Find the end of the string 
while(*target++=*source++); 
return(original); 

4. streql(), 判断两个字符串是否相等. 
int streql(char *str1,char *str2) 

while((*str1==*str2)&&(*str1)) 

str1++; 
str2++; 

return((*str1==NULL)&&(*str2==NULL)); 

5. strchr(), 在字符串中查找某个字符. 
char *strchr(const char *string,int letter) 

while((*string!=letter)&(*string)) 
string++; 
return (string); 

6. chrcnt(), 计算某个字符在字符串中出现的次数. 
int chrcnt(const char *string,int letter) 

int count=0; 
while(*string) 
if(*string==letter)count++; 
return count; 

7. strcmp(), 判断两个字符串是否相等. 
int strcmp(const char *str1,const char *str2) 

while((*str1==*str2)&&(*str1)) 

str1++; 
str2++; 

if((*str1==*str2)&&(!*str1)) //Same strings 
return o; 
else if((*str1)&&(!*str2)) //Same but str1 longer 
return -1; 
else if((*str2)&&(!*str1)) //Same but str2 longer 
else 
return((*str1>*str2)?-1:1); 
}

2、strcmp函数:

int mystrcmp(const char *str1,const char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
if((*str1==*str2)&&(!*str1)) //Same strings
return 0;
else if((*str1)&&(!*str2)) //Same but str1 longer
return 1;
else if ((!*str1)&&(*str2))
return -1 ;
else
return ((*str1>*str2)?1:-1);

}

3、strcat函数:

char *mystrcat(char *target,const char *source)
{
char *original=target;
while(*target) target++; // Find the end of the string
while(*target++=*source++);
return(original);
}


int main(void)
{

char destination[25];
char * cc; 
char *blank = " ", *c = "C++", *Borland = "Borland";
strcpy(destination, Borland);
mystrcat(destination, blank);
cc=mystrcat(destination, c);
printf("%s/n", cc);

}
4、strcpy函数

char *mystrcpy(char *destination, const char *source)
{
while(*destination++=*source++); 
return (destination);
}

5、strlen函数
int mystrlen(const char *string)
{
int i=0;
while(*string++)
i++;
return i;
}
5、streql函数
int mystreql(char *str1,char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
return((*str1==NULL)&&(*str2==NULL));
}
6、strchr函数
char * mystrchr(const char *string,char letter)
{
while((*string!=letter)&&(*string))
string++;
return (string);
}

int main(void)
{
char string[15];
char *ptr, c = 'r';
strcpy(string, "This is a string");
ptr = mystrchr(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;
}
7、ctrcnt函数
int mychrcnt(const char *string,char letter) /*指定计算字符串内的指定字符的个数*/
{
int count=0;

while(*string)
{
if(*string==letter)
count++;
string++;
}
return count;
}

函数strcpy的实现源代码
  char *strcpy(char *strDest, const char *strSrc);
  {
  assert((strDest!=NULL) && (strSrc !=NULL)); 
  char *address = strDest; 
  while( (*strDest++ = * strSrc++) != ‘/0’ ) 
  NULL ; 
  return address ; 
  }

函数strcat的实现源代码
char * strcat(char * dest, const char * src)
{
char *tmp = dest;

while (*dest)
dest++;
while ((*dest++ = *src++) != '/0')
;

return tmp;
}

函数原型:int strcmp(const char *dest, const char *source) ;

返回值:返回整数值,如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。字符大小是按照字符的字典序列进行排列的。

参数说明:都是以''/0''为结束符的字符串

函数strcmp的实现源代码
int strcmp(const char *dest, const char *source) 

assert((NULL != dest) && (NULL != source)); 
while (*dest && *source && (*dest == *source)) 

dest ++; 
source ++; 

return *dest - *source; 
/*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。*/ 
}

函数memset的实现源代码
void* memcpy( void* dest, const void* src, size_t count )
{

if (count<0)

{printf("Invalid count number !./n");

return (void*)0;}

if(src==NULL||dest==NULL)

return (void*)0 ;

if ((unsigned int)dest==(unsigned int)src)

{printf("The source is equal with the destanation!./n");

return dest;}

char* d = (char*)dest;
const char* s = (const char*)src;
while(count--) 
*d++ = *s++;
return dest;
}


函数memset的实现源代码
void* memcpy( void* dest, const void* src, size_t count )
{

if (count<0)

{printf("Invalid count number !./n");

return (void*)0;}

if(src==NULL||dest==NULL)

return (void*)0 ;

if ((unsigned int)dest==(unsigned int)src)

{printf("The source is equal with the destanation!./n");

return dest;}

char* d = (char*)dest;
const char* s = (const char*)src;
while(count--) 
*d++ = *s++;
return dest;
}

函数strlen的实现源代码
  int strlen(const char *str)

  {

  assert(str != NULL);

  int len = 0;

  while((*str++) != '/0')

  len++;

  return len;

  }

函数malloc的实现源代码

引用:http://topic.csdn.net/t/20051114/18/4392766.html 

#ifndef CRAY 
#define STACKMIN 512 
#define MINBLK (2*sizeof(struct mem) + 16) 
#define F _malloc_free_ 
#define SBGULP 8192 
#include "string.h" /* for memcpy */ 

#ifdef KR_headers 
#define Char char 
#define Unsigned unsigned 
#define Int /*int*/ 
#else 
#define Char void 
#define Unsigned size_t 
#define Int int 
#endif 

typedef struct mem { 
struct mem *next; 
Unsigned len; 
} mem; 

mem *F; 

Char * 
#ifdef KR_headers 
malloc(size) 
register Unsigned size; 
#else 
malloc(register Unsigned size) 
#endif 

register mem *p, *q, *r, *s; 
unsigned register k, m; 
extern Char *sbrk(Int); 
char *top, *top1; 

size = (size+7) & ~7; 
r = (mem *) &F; 
for (p = F, q = 0; p; r = p, p = p->next) { 
if ((k = p->len) >= size && (!q || m > k)) { 
m = k; 
q = p; 
s = r; 


if (q) { 
if (q->len - size >= MINBLK) { /* split block */ 
p = (mem *) (((char *) (q+1)) + size); 
p->next = q->next; 
p->len = q->len - size - sizeof(mem); 
s->next = p; 
q->len = size; 

else 
s->next = q->next; 

else { 
top = (Char *)(((long)sbrk(0) + 7) & ~7); 
if (F && (char *)(F+1) + F->len == top) { 
q = F; 
F = F->next; 

else 
q = (mem *) top; 
top1 = (char *)(q+1) + size; 
if (sbrk((int)(top1-top+SBGULP)) == (Char *) -1) 
return 0; 
r = (mem *)top1; 
r->len = SBGULP - sizeof(mem); 
r->next = F; 
F = r; 
q->len = size; 

return (Char *) (q+1); 


void 
#ifdef KR_headers 
free(f) 
Char *f; 
#else 
free(Char *f) 
#endif 

mem *p, *q, *r; 
char *pn, *qn; 

if (!f) return; 
q = (mem *) ((char *)f - sizeof(mem)); 
qn = (char *)f + q->len; 
for (p = F, r = (mem *) &F; ; r = p, p = p->next) { 
if (qn == (Char *) p) { 
q->len += p->len + sizeof(mem); 
p = p->next; 

pn = p ? ((char *) (p+1)) + p->len : 0; 
if (pn == (Char *) q) { 
p->len += sizeof(mem) + q->len; 
q->len = 0; 
q->next = p; 
r->next = p; 
break; 

if (pn < (char *) q) { 
r->next = q; 
q->next = p; 
break; 




Char * 
#ifdef KR_headers 
realloc(f, size) 
Char *f; 
Unsigned size; 
#else 
realloc(Char *f, Unsigned size) 
#endif 

mem *p; 
Char *q, *f1; 
Unsigned s1; 

if (!f) return malloc(size); 
p = (mem *) ((char *)f - sizeof(mem)); 
s1 = p->len; 
free(f); 
if (s1 > size) 
s1 = size + 7 & ~7; 
if (!p->len) { 
f1 = (Char *)(p->next + 1); 
memcpy(f1, f, s1); 
f = f1; 

q = malloc(size); 
if (q && q != f) 
memcpy(q, f, s1); 
return q; 


/* The following (calloc) should really be in a separate file, */ 
/* but defining it here sometimes avoids confusion on systems */ 
/* that do not provide calloc in its own file. */ 

Char * 
#ifdef KR_headers 
calloc(n, m) Unsigned m, n; 
#else 
calloc(Unsigned n, Unsigned m) 
#endif 

Char *rv; 
rv = malloc(n *= m); 
if (n && rv) 
memset(rv, 0, n); 
return rv; 

#endif




文件名:communal.h   
  发布版本:0.12   
  发布时间:2003.12.16     
    

  #include   <stdio.h>   
  #include   <string.h>   
    
  char   *   strcpyx(const   char   *s1,char   *s2,unsigned   int   StartPos,unsigned   int   len);   
  char   *   Replace(const   char   *SourStr,char   *DestStr,const   char   *s1,const   char   *s2);   
  char   *   RStr(const   char   *SourStr,char   *DestStr,unsigned   int   len);   
  char   *   LStr(const   char   *SourStr,char   *DestStr,unsigned   int   len);   
  char   *   RTrim(const   char   *SourStr,char   *DestStr);   
  char   *   LTrim(const   char   *SourStr,char   *DestStr);   
  char   *   TurnStr2(const   char   *SourStr,char   *DestStr);   
  char   *   TurnStr(char   *str);   
  char   *   IntToStr(int   Value,char   *str);   
  unsigned   int   pos(const   char   *SubStr,const   char   *DestStr);   
  unsigned   char     istoASCs(unsigned   char*   desBuffer,unsigned   char*   srcBuffer,int   len);   
  int   StrToEBCD(char   *buf,char   *ucBuffer,int   BufLen);   
    
   
  功能说明:   
  把s1中从指定位置开始的指定长度字符串复制到s2中   
  参数说明:   
  s1:原字符串   
  s2:目标字符串   
  s1:复制的起始位置   
  len:复制长度   
  返回值:   
  返回取得的字符串s2   

  char   *   strcpyx(const   char   *s1,char   *s2,unsigned   int   StartPos,unsigned   int   len)   
  {   
          unsigned   int   i=StartPos;   
          for   (i=StartPos;i<StartPos+len   &&   s1[i]!='\0';i++)   
          {   
                  s2[i-StartPos]   =   s1[i];   
          }   
          s2[i-StartPos]='\0';   
          return   s2;   
  }   
    

  功能说明:   
  替换字符串中指定的内容   
  参数说明:   
  SourStr:原字符串   
  DestStr:替换后的字符串   
  s1:被替换的子串   
  s2:替换s1的子串   
  返回值:   
  返回替换完成后的字符串   
   
  char   *   Replace(const   char   *SourStr,char   *DestStr,const   char   *s1,const   char   *s2)   
  {   
          //尚未完成...   
          int   i=0;   
          int   j=0;   
          DestStr[0]='\0';   
          while   (i=pos(s1,SourStr))   
          {   
    
                  j=i;   
          }   
          return   DestStr;   
  }   
    

  功能说明:   
  从右端截取指定长度的字符串   
  参数说明:   
  str:原字符串   
  len:截取长度   
  返回值:   
  返回截取指定长度的字符串   

  char   *   RStr(const   char   *SourStr,char   *DestStr,unsigned   int   len)   
  {   
          int   i;   
          int   j=0;   
          len   =   len>strlen(SourStr)   ?   strlen(SourStr)   :   len;   
          for   (i=strlen(SourStr)-len;   SourStr[i]   !=   '\0';   i++)   
          {   
                  DestStr[j]=SourStr[i];   
                  j++;   
          }   
          DestStr[j]='\0';   
          return   DestStr;   
  }   
    
  从左端截取指定长度的字符串
  char   *   LStr(const   char   *SourStr,char   *DestStr,unsigned   int   len)   
  {   
          if   (len>strlen(SourStr))           
                  len=strlen(SourStr);           
          if   (len==0)     
          {   
                  *DestStr='\0';   
          }   
          else   
          {   
                  strcpy(DestStr,SourStr);   
                  *(DestStr+len)='\0';   
          }   
          return   DestStr;   
  }   
    
截去一个字符串的右端空格
  char   *   RTrim(const   char   *SourStr,char   *DestStr)   
  {   
          int   i;   
          strcpy(DestStr,SourStr);   
          for   (i=strlen(DestStr)-1;i>=0;i--)   
          {   
                  if   (DestStr[i]=='   ')     
                          DestStr[i]='\0';   
                  else   
                          break;   
          }   
          return   DestStr;   
  }   
    
    
    
  char   *   LTrim(const   char   *SourStr,char   *DestStr)   
  {   
          unsigned   int   i=0;   
          int   flag=0;   
          for   (i=0;i<strlen(SourStr);i++)   
          {   
                  if   (SourStr[i]=='   ')     
                          i++;   
                  else   
                          break;   
          }   
          return   strcpyx(SourStr,DestStr,i,strlen(SourStr)-i);   
  }   
    
  前后翻转一个字符串
  char   *   TurnStr2(const   char   *SourStr,char   *DestStr)   
  {   
          int   i;   
          int   len=strlen(SourStr);   
          for   (i=0;i<len;i++)   
          {   
                  *(DestStr+i)=*(SourStr+len-i-1);   
          }   
          *(DestStr+len)='\0';   
          return   DestStr;   
  }   
    
  前后翻转一个字符串  
  char   *   TurnStr(char   *str)   
  {   
          char   temp;   
          int   i=0;   
          int   j=strlen(str)-1;   
          for   (i=0;i<j;i++,j--)   
          {   
                  temp=str[i];   
                  str[i]=str[j];   
                  str[j]=temp;   
          }   
          return   str;   
  }   
    
  把一个整数转化为一个字符串
  char   *   IntToStr(int   Value,char   *str)   
  {   
          int   i=0;   
          int   minus=0;//负号   
          if   (Value==0)     
          {   
                  str[i]='0';   
                  i++;         
          }   
          if   (Value<0)   
          {   
                  minus=1;   
                  Value=abs(Value);   
          }   
          while   (Value>=1)   
          {   
                  switch   (Value   %   10)   
                  {   
                  case   0:str[i]='0';break;   
                  case   1:str[i]='1';break;   
                  case   2:str[i]='2';break;   
                  case   3:str[i]='3';break;   
                  case   4:str[i]='4';break;   
                  case   5:str[i]='5';break;   
                  case   6:str[i]='6';break;   
                  case   7:str[i]='7';break;   
                  case   8:str[i]='8';break;   
                  case   9:str[i]='9';break;   
                  }   
                  Value=Value/10;   
                  i++;   
          }   
          if   (minus)   
          {   
                  str[i]='-';   
                  i++;   
          }   
          str[i]='\0';   
          return   TurnStr(str);   
  }   
    
    
   
  判断SubStr是否包含在DestStr中,   
  存在返回SubStr第一次出现的位置,不存在返回0   
  
  unsigned   int   pos(const   char   *SubStr,const   char   *DestStr)   
  {   
          unsigned   int   i,j;   
          for   (i=0;i<strlen(DestStr);i++)   
          {   
                  if   (DestStr[i]==SubStr[0])   
                  {   
                          for   (j=0;j<strlen(SubStr);j++)   
                          {   
                                    
                                  if   (j==(strlen(SubStr)-1))   
                                          return   i+1;   
                                  else   if   (DestStr[i+j]!=SubStr[j])   
                                          break;   
                          }   
                  }   
          }   
          return   0;   
  }   
    
  //十六进制转换为压缩BCD码   
  //   convert   {0x4c,0x5e,0x33}   to   "4c5e33"   
  unsigned   char     istoASCs(unsigned   char*   desBuffer,unsigned   char*   srcBuffer,int   len)   
  {     int   i;   
  char   ch;   
  for(i=0;i<len;i++)   
  {   
          ch   =   srcBuffer[i]   >>   4;   
          if((ch   >=   0)&&(ch   <=   9))   
          {   
                  desBuffer[2*i]   =   ch   +'0';   
          }   
          else   if((ch   >=10)&&(ch   <=   15))   
          {   
                  desBuffer[2*i]   =   ch   +   55;   
          }   
          else   
                  desBuffer[2*i]   =   '*';   
          ch   =   srcBuffer[i]   &   0x0F;   
          if((ch   >=   0)&&(ch   <=   9))   
          {   
                  desBuffer[2*i+1]   =   ch   +'0';   
          }   
          else   if((ch   >=10)&&(ch   <=   15))   
          {   
                  desBuffer[2*i+1]   =   ch   +   55;   
          }   
          else   
                  desBuffer[2*i+1]   =   '*';   
  }   
  desBuffer[2*i]   =   '\0';   
  return   0;   
  }   
    
    
    
  //压缩BCD码转换为十六进制   
  //89860099--->0x89,0x86,0x00,0x99   
    
  int   StrToEBCD(char   *buf,char   *ucBuffer,int   BufLen)   
  { unsigned   char   temp1,temp2;   
  int   Len=BufLen/2,i;   
    
  for   (i=0;i<Len;i++)   
  {   
          temp1=buf[i*2];   
          if   (temp1>='a')   
                  temp1=temp1   -   'a'   +   10;   
          if   (temp1>='A')   
                  temp1=temp1   -   'A'   +   10;   
          if   (temp1>='0')   
                  temp1=temp1-'0';   
            
          temp2=buf[i*2   +   1];   
          if   (temp2>='a')   
                  temp2=temp2   -   'a'   +   10;   
          if   (temp2>='A')   
                  temp2=temp2   -   'A'   +   10;   
          if   (temp2>='0')   
                  temp2=temp2-'0';   
          ucBuffer[i]=((temp1&0x0f)<<4)|(temp2&0x0f);   
  }   
  return   0;   
  }   文件名:communal.h   
  发布版本:0.12   
  发布时间:2003.12.16     
    

  #include   <stdio.h>   
  #include   <string.h>   
    
  char   *   strcpyx(const   char   *s1,char   *s2,unsigned   int   StartPos,unsigned   int   len);   
  char   *   Replace(const   char   *SourStr,char   *DestStr,const   char   *s1,const   char   *s2);   
  char   *   RStr(const   char   *SourStr,char   *DestStr,unsigned   int   len);   
  char   *   LStr(const   char   *SourStr,char   *DestStr,unsigned   int   len);   
  char   *   RTrim(const   char   *SourStr,char   *DestStr);   
  char   *   LTrim(const   char   *SourStr,char   *DestStr);   
  char   *   TurnStr2(const   char   *SourStr,char   *DestStr);   
  char   *   TurnStr(char   *str);   
  char   *   IntToStr(int   Value,char   *str);   
  unsigned   int   pos(const   char   *SubStr,const   char   *DestStr);   
  unsigned   char     istoASCs(unsigned   char*   desBuffer,unsigned   char*   srcBuffer,int   len);   
  int   StrToEBCD(char   *buf,char   *ucBuffer,int   BufLen);   
    
   
  功能说明:   
  把s1中从指定位置开始的指定长度字符串复制到s2中   
  参数说明:   
  s1:原字符串   
  s2:目标字符串   
  s1:复制的起始位置   
  len:复制长度   
  返回值:   
  返回取得的字符串s2   

  char   *   strcpyx(const   char   *s1,char   *s2,unsigned   int   StartPos,unsigned   int   len)   
  {   
          unsigned   int   i=StartPos;   
          for   (i=StartPos;i<StartPos+len   &&   s1[i]!='\0';i++)   
          {   
                  s2[i-StartPos]   =   s1[i];   
          }   
          s2[i-StartPos]='\0';   
          return   s2;   
  }   
    

  功能说明:   
  替换字符串中指定的内容   
  参数说明:   
  SourStr:原字符串   
  DestStr:替换后的字符串   
  s1:被替换的子串   
  s2:替换s1的子串   
  返回值:   
  返回替换完成后的字符串   
   
  char   *   Replace(const   char   *SourStr,char   *DestStr,const   char   *s1,const   char   *s2)   
  {   
          //尚未完成...   
          int   i=0;   
          int   j=0;   
          DestStr[0]='\0';   
          while   (i=pos(s1,SourStr))   
          {   
    
                  j=i;   
          }   
          return   DestStr;   
  }   
    

  功能说明:   
  从右端截取指定长度的字符串   
  参数说明:   
  str:原字符串   
  len:截取长度   
  返回值:   
  返回截取指定长度的字符串   

  char   *   RStr(const   char   *SourStr,char   *DestStr,unsigned   int   len)   
  {   
          int   i;   
          int   j=0;   
          len   =   len>strlen(SourStr)   ?   strlen(SourStr)   :   len;   
          for   (i=strlen(SourStr)-len;   SourStr[i]   !=   '\0';   i++)   
          {   
                  DestStr[j]=SourStr[i];   
                  j++;   
          }   
          DestStr[j]='\0';   
          return   DestStr;   
  }   
    
  从左端截取指定长度的字符串
  char   *   LStr(const   char   *SourStr,char   *DestStr,unsigned   int   len)   
  {   
          if   (len>strlen(SourStr))           
                  len=strlen(SourStr);           
          if   (len==0)     
          {   
                  *DestStr='\0';   
          }   
          else   
          {   
                  strcpy(DestStr,SourStr);   
                  *(DestStr+len)='\0';   
          }   
          return   DestStr;   
  }   
    
截去一个字符串的右端空格
  char   *   RTrim(const   char   *SourStr,char   *DestStr)   
  {   
          int   i;   
          strcpy(DestStr,SourStr);   
          for   (i=strlen(DestStr)-1;i>=0;i--)   
          {   
                  if   (DestStr[i]=='   ')     
                          DestStr[i]='\0';   
                  else   
                          break;   
          }   
          return   DestStr;   
  }   
    
    
    
  char   *   LTrim(const   char   *SourStr,char   *DestStr)   
  {   
          unsigned   int   i=0;   
          int   flag=0;   
          for   (i=0;i<strlen(SourStr);i++)   
          {   
                  if   (SourStr[i]=='   ')     
                          i++;   
                  else   
                          break;   
          }   
          return   strcpyx(SourStr,DestStr,i,strlen(SourStr)-i);   
  }   
    
  前后翻转一个字符串
  char   *   TurnStr2(const   char   *SourStr,char   *DestStr)   
  {   
          int   i;   
          int   len=strlen(SourStr);   
          for   (i=0;i<len;i++)   
          {   
                  *(DestStr+i)=*(SourStr+len-i-1);   
          }   
          *(DestStr+len)='\0';   
          return   DestStr;   
  }   
    
  前后翻转一个字符串  
  char   *   TurnStr(char   *str)   
  {   
          char   temp;   
          int   i=0;   
          int   j=strlen(str)-1;   
          for   (i=0;i<j;i++,j--)   
          {   
                  temp=str[i];   
                  str[i]=str[j];   
                  str[j]=temp;   
          }   
          return   str;   
  }   
    
  把一个整数转化为一个字符串
  char   *   IntToStr(int   Value,char   *str)   
  {   
          int   i=0;   
          int   minus=0;//负号   
          if   (Value==0)     
          {   
                  str[i]='0';   
                  i++;         
          }   
          if   (Value<0)   
          {   
                  minus=1;   
                  Value=abs(Value);   
          }   
          while   (Value>=1)   
          {   
                  switch   (Value   %   10)   
                  {   
                  case   0:str[i]='0';break;   
                  case   1:str[i]='1';break;   
                  case   2:str[i]='2';break;   
                  case   3:str[i]='3';break;   
                  case   4:str[i]='4';break;   
                  case   5:str[i]='5';break;   
                  case   6:str[i]='6';break;   
                  case   7:str[i]='7';break;   
                  case   8:str[i]='8';break;   
                  case   9:str[i]='9';break;   
                  }   
                  Value=Value/10;   
                  i++;   
          }   
          if   (minus)   
          {   
                  str[i]='-';   
                  i++;   
          }   
          str[i]='\0';   
          return   TurnStr(str);   
  }   
    
    
   
  判断SubStr是否包含在DestStr中,   
  存在返回SubStr第一次出现的位置,不存在返回0   
  
  unsigned   int   pos(const   char   *SubStr,const   char   *DestStr)   
  {   
          unsigned   int   i,j;   
          for   (i=0;i<strlen(DestStr);i++)   
          {   
                  if   (DestStr[i]==SubStr[0])   
                  {   
                          for   (j=0;j<strlen(SubStr);j++)   
                          {   
                                    
                                  if   (j==(strlen(SubStr)-1))   
                                          return   i+1;   
                                  else   if   (DestStr[i+j]!=SubStr[j])   
                                          break;   
                          }   
                  }   
          }   
          return   0;   
  }   
    
  //十六进制转换为压缩BCD码   
  //   convert   {0x4c,0x5e,0x33}   to   "4c5e33"   
  unsigned   char     istoASCs(unsigned   char*   desBuffer,unsigned   char*   srcBuffer,int   len)   
  {     int   i;   
  char   ch;   
  for(i=0;i<len;i++)   
  {   
          ch   =   srcBuffer[i]   >>   4;   
          if((ch   >=   0)&&(ch   <=   9))   
          {   
                  desBuffer[2*i]   =   ch   +'0';   
          }   
          else   if((ch   >=10)&&(ch   <=   15))   
          {   
                  desBuffer[2*i]   =   ch   +   55;   
          }   
          else   
                  desBuffer[2*i]   =   '*';   
          ch   =   srcBuffer[i]   &   0x0F;   
          if((ch   >=   0)&&(ch   <=   9))   
          {   
                  desBuffer[2*i+1]   =   ch   +'0';   
          }   
          else   if((ch   >=10)&&(ch   <=   15))   
          {   
                  desBuffer[2*i+1]   =   ch   +   55;   
          }   
          else   
                  desBuffer[2*i+1]   =   '*';   
  }   
  desBuffer[2*i]   =   '\0';   
  return   0;   
  }   
    
    
    
  //压缩BCD码转换为十六进制   
  //89860099--->0x89,0x86,0x00,0x99   
    
  int   StrToEBCD(char   *buf,char   *ucBuffer,int   BufLen)   
  { unsigned   char   temp1,temp2;   
  int   Len=BufLen/2,i;   
    
  for   (i=0;i<Len;i++)   
  {   
          temp1=buf[i*2];   
          if   (temp1>='a')   
                  temp1=temp1   -   'a'   +   10;   
          if   (temp1>='A')   
                  temp1=temp1   -   'A'   +   10;   
          if   (temp1>='0')   
                  temp1=temp1-'0';   
            
          temp2=buf[i*2   +   1];   
          if   (temp2>='a')   
                  temp2=temp2   -   'a'   +   10;   
          if   (temp2>='A')   
                  temp2=temp2   -   'A'   +   10;   
          if   (temp2>='0')   
                  temp2=temp2-'0';   
          ucBuffer[i]=((temp1&0x0f)<<4)|(temp2&0x0f);   
  }   
  return   0;   
  }   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值