串操作

    技术2022-05-11  96

    #include <stdio.h>#include <string.h>#include <malloc.h>#include<assert.h>//测串长int StrLength(const char *str)   {    assert(str); const char*p = str;  while(*p++);  return p-str-1;   } //比较两个串的大小.若str1>str2返回>0,str1==str2返回=0,st1<str2返回<0int StrCompare( const char* s, const char * t){ const char* p1=s; const char* p2=t; while(*p1 && *p2){  if(*p1 != *p2) return *p1-*p2;  p1++;  p2++; }    return StrLength(s)-StrLength(t);}//字符串拷贝char * StrCopy(char * strDest, const char * strSrc) { if ((strDest==NULL)||(strSrc==NULL))   throw "Invalid argument(s)";  char * strDestCopy=strDest; while ((*strDest++=*strSrc++)!='/0'); return strDestCopy; }char * StrCopyImprove(char * strDest, const char * strSrc) {    if ((strDest==NULL)||(strSrc==NULL))   throw "Invalid argument(s)";  int lens=StrLength(strSrc),lend=StrLength(strDest),i; if (lend<lens) {  char *temp = new char[lens+1];  while ((*temp++=*strSrc++)!='/0');  for(i=0;i<lens+1;i++)    temp--;  return temp; } else {  return StrCopy(strDest,strSrc); }}//字符串连接char *StrConnect(char * s,char * t) {  assert(s!=NULL && t!=NULL); int lenST=StrLength(s)+StrLength(t)+1; char *temp= (char*)malloc(lenST*sizeof(char)); assert(temp!=NULL); char *sp = s,*tp=t;  while(*sp)  *temp++=*sp++;  while(*temp++=*tp++);    while(lenST--)temp--; return temp;}//求子串:从主串的pos位置开始(pos从0开始计数),取长度为len的子串.char *SubString(char *s, int pos,int len){ assert(s!=NULL); int lens=StrLength(s),i=len; if(pos<1 || pos>lens || len<0 || len>lens-pos+1)  throw"Valid parameters" ; char *sub=NULL; if(!len) return sub;  sub=(char*)malloc((len+1)*sizeof(char)); char *sp=s; while(pos--)   sp++; while(len--){  *sub=*sp;  sub++;  sp++; } *sub='/0'; while(i--)  sub--; return sub;}//模式匹配(算法思想:从主串S的第pos个字符起和模式T的第一个字符比较之,若相等,则继续逐个比较后续//字符,否则从主串的下一个字符起再重新和模式T的字符比较之。int StrMatch(char* S,char* T,int pos){ int lenS = StrLength(S); int lenT =StrLength(T); int i=pos,j=0; while(i<lenS && j<lenT){  if(*(S+i)==*(T+j)){   ++i;   ++j;  }  else{   i=i-j+1;   j=0;  } } if(j>=lenT)  return i-lenT; else  return -1;} 

    串拷贝(strcpy)和内存拷贝(memcpy)的区别:

    strcpy()只能拷贝字符串,memcpy()可以拷贝任意类型的数据.

    memcpy()的模拟如下:

    void * memcpy(char *pvTo, char * pvFrom, size_t size){

           assert((pvTo!=NULL)&&(pvFrom!=NULL));

           char *pbTo=pvTo; //防止改变pvTo的地址

           char * pbFrom=pvFrom;//防止改变pvFrom的地址

           while(size-->0){ *pbTo++=*pbFrom++;}

           return pvTo;

    }


    最新回复(0)