您的位置:首页 > 编程语言 > C语言/C++

C++常用字符串函数

2015-07-22 09:47 666 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: