串操作

原创 2007年09月29日 12:19:00

#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返回<0
int 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;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

串string定义与操作

#include #define MAXLENGTH 255//最大的字符串的长度 #define OK 1 #define ERROR 0 typedef int Status;//表示返回的状态...

String串的操作

  • 2011-06-08 20:50
  • 23KB
  • 下载

串或序列的rotate操作(转)

串或序列的rotate操作 这里的rotate操作,也就是指循环移位。比如将串“ABCDEFG”以D为中心旋转,就相当将该串向左循环移位,直到第一个元素为D为止,最后得到新串“DEF...

串的顺序存储操作

  • 2007-12-18 16:18
  • 34KB
  • 下载

顺序串操作C++描述

串的链式存储基本操作

#include #define MaxSize 100 //最多的字符个数 typedef struct { char data[MaxSize]; //定义可容纳MaxSiz...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)