串操作

原创 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;

}

通过实例测试串的基本操作,如 串的赋值、串的插入、串的删除、串的替换、串的销毁。

头文件:函数的声明 #include #include #include typedef struct { char *str; int length; }HeapString; vo...
  • qaz3171210
  • qaz3171210
  • 2015年02月14日 14:11
  • 1248

串和串操作

一、概述     1)串和串操作     存储器中的地址连续的若干单元的字符或数据称为字符串或数据串。串操作指令就是用来对串中每个字符或数据进行操作的指令。     串指令既可处理字节串,也可处...
  • zhaofuguang
  • zhaofuguang
  • 2013年10月18日 14:54
  • 478

数据结构学习(十)——串的操作

几天没看数据结构了,今天重新开始了。     串是一种特殊的线性表,它的每个结点是一个字符,所以串也称作字符串。     关于串的操作主要有求串长,串复制,串连接,求子串,串插入,串删除,子串定位...
  • abclixu123
  • abclixu123
  • 2012年12月04日 21:09
  • 4175

25、数据结构笔记之二十五串应用之文本编辑

25、数据结构笔记之二十五串应用之文本编辑            “正如恶劣的品质可以在幸运中暴露一样,最美好的品质也是在厄运中被显示的。 -- 培根”            由于前段时间一直出...
  • notbaron
  • notbaron
  • 2017年09月14日 00:10
  • 3602

汇编(十三)——串操作类指令

在计算机中,大部分数据存放在主存中,8086CPU提供了一组处理主存中连续存放的数据串的指令——串操作指令。串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越;目的操作数用寄存器...
  • tornadofeng
  • tornadofeng
  • 2008年01月28日 10:23
  • 878

【数据结构】 串的基本操作

/* ========================================================================================== 串...
  • fanxingzju
  • fanxingzju
  • 2014年04月25日 22:54
  • 3035

源串修改为目标串共操作的次数以及最长公共子串

给定一个源串和目标串,能够对源串进行如下操作: 1).在给定位置上插入一个字符 2).替换任意字符 3).删除任意字符 写一个程序,返回最小操作次数,使得对源串进行这些操作后等于目标串。 例如:源串”...
  • qingen1
  • qingen1
  • 2013年10月07日 15:55
  • 1159

[汇编]8086指令系统---串处理指令

[汇编]8086指令系统---串处理指令   串处理指令处理存放在存储器中的字节串或字串,串处理的方向由方向标志位DF决定,串处理指令之前可加重复前缀,在执行串处理指令时,源串的指针SI和目的串的指针...
  • pianistOfSoftware
  • pianistOfSoftware
  • 2016年07月20日 15:44
  • 514

【数据结构】算法4.5 不依赖其他串操作的Index

//求子串位置的定位函数 #include #include #include#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #...
  • Vit_rose
  • Vit_rose
  • 2016年10月10日 20:15
  • 450

字符串操作-串的存储结构、赋值、串长、子串、匹配...

这是放假之前写的很乱的代码,主要解决字符串操作的问题,如串赋值、求串长、求子串等等//#include "file.h" //#include "function.c" #include #incl...
  • yuzibode
  • yuzibode
  • 2014年01月18日 13:10
  • 1573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:串操作
举报原因:
原因补充:

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