关闭

串操作

772人阅读 评论(0) 收藏 举报

#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;

}

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:108433次
    • 积分:1514
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:19篇
    • 译文:7篇
    • 评论:16条
    最新评论