当前位置:编程学习 > C/C++ >>

数据结构——定长串操作

首先我们必须了解的定长串的相关名词:
串   长:是指字符串的长度,如:“abcde”长度为5,“PI”长度为2
 
串相等:两个字符串的长度和内容均相等,如:“abcde”和“abcde”
 
空格串:字符串由一个或多个空格组成,空格串不是空串,空格串有长度,如:“   ”
 
空   串:字符串长度为零,如:“”
 
子   串:一个串的某一部分,如:“abcde”的“a”,“bc”,“bcd”等都是子串
 
[cpp]  
//-----头文件------  
#include <stdio.h>  
#include <stdlib.h>  
#include <stdbool.h>  
  
//------宏定义------  
#define      MAXSTRLEN         255  
#define      OVERFLOW          -2  
#define      TURE              1  
#define      ERROR             0  
  
//-------类型名替换--------  
typedef unsigned char SString[MAXSTRLEN+1];  
typedef int Bool;  
  
//-----函数列表-----  
Bool StrAssign(SString *T,char *s);  
Bool StrCopy(SString *T,SString S);  
Bool StrEmpty(SString S);  
Bool ClearString(SString *S);  
int  StrCompare(SString S,SString T);  
int  StrLength(SString S);  
Bool Concat(SString *T,SString S1,SString S2);  
Bool SubString(SString *Sub,SString S,int pos,int len);  
Bool StrInsert(SString *S,int pos,SString T);  
Bool StrDelete(SString *S,int pos,int len);  
Bool Replace(SString *S,SString T,SString V);  
Bool DestroyString(SString *S);  
int  Index(SString S,SString T,int pos);  
void StrOutput(SString S);  
  
//-----主函数做替换测试------  
int main()  
{  
    SString t,*T=&t,s,*S=&s,s0,*S0=&s0;  
    int n;  
      
    //串初始化  
    StrAssign(T,"abcdedehdeklmdepqded");  
    StrAssign(S0,"de");  
    StrAssign(S,"$$$");  
      
    //串拷贝  
    StrCopy(T, s0);  
    if(StrEmpty(t))  
    {  
        printf("yes is empty!\n");  
    }  
    else  
    {  
        printf("non empty!\n");  
    }  
      
    //清空串  
    //ClearString(T);  
    if(StrEmpty(t))  
    {  
        printf("yes is empty!\n");  
    }  
    else  
    {  
        printf("non empty!\n");  
    }  
      
    //判断两个串是否相等  
    n = StrCompare(t, s0);  
    printf("The reasult is: %d\n", n);  
      
    //获取串长  
    printf("The length is:%d\n", StrLength(t));  
      
    //串连接  
    Concat(S, t, s0);  
    StrOutput(s);  
      
    //获取指定字串  
    SubString(S, t, 5, 5);  
    StrOutput(s);  
      
    //插入字串  
    StrInsert(T, 1, s0);  
    StrOutput(t);  
      
    //删除字串  
    StrDelete(T, 5, 5);  
    StrOutput(*T);  
      
    //串替换  
    Replace(T,s0,s);  
    StrOutput(*T);  
      
    return 0;  
}  
  
//------生成一个其值等于字符串常量的串T------  
Bool StrAssign(SString *T, char *s)  
{  
    int i;  
    for(i=0; '\0'!=*s; s++,i++)  
    {  
        (*T)[i+1] = *s;  
    }  
    (*T)[0] = i;   //串第一个地址存放串长  
    return TURE;  
}  
  
//------复制串S到串T中,生成一个其值等于串S的串T------  
Bool StrCopy(SString *T, SString S)  
{  
    int i;  
    for(i=1; i<=S[0]; i++)  
    {  
        (*T)[i] = S[i];  
    }  
    (*T)[0] = S[0];  
    return TURE;  
}  
  
//-----判断是否为空串,为空返回TURE,非空返回ERROR------  
Bool StrEmpty(SString S)  
{  
    return S[0]==0?TURE:ERROR;  
}  
  
//-----比较两个串的大小------  
//串S大于串T返回1,小于返回-1,等于返回0,错误返回-2  
int StrCompare(SString S,SString T)  
{  
    int i;  
    if(0==S[0] || 0==T[0])  
    {  
        return -2;       //不能返回ERROR,因为ERROR=0  
    }  
    for(i=1; i<=S[0]&&i<=T[0]; i++)  
    {  
        if(S[i]>T[i])  
        {  
            return 1;  
        }  
        else if(S[i]<T[i])  
        {  
            return -1;  
        }  
        else  
        {  
            continue;  
        }  
    }  
    if(S[0]==T[0])  
    {  
        return 0;  
    }  
  &nbs
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,