字符串实现

用字符串实现string

//sqstring.h
#include<cstdio>
#include<iostream>
using namespace std;
#define MaxSize 100
typedef struct
{
    char data[MaxSize]; //字符串
    int length;         //字符串的长度
} SqString;
void StrAssign(SqString &s,char cstr[]){
    //创建字符串
    int i;
    for(i = 0; cstr[i] != '\0'; i++)    //依次拷贝
        s.data[i] = cstr[i];
    s.length = i;       //更新长度
}
void DestroyStr(SqString &s){
    //销毁字符串
    s = ""; 
}
int StrLength(SqString s){
    //字符串的长度
    return s.length;
}
void StrCopy(SqString &s,SqString t){
    //字符串的拷贝  把t拷贝给s
    for(int i = 0; i < t.length; i++)
        s.data[i] = t.data[i];
    s.length = t.length;
}
bool StrEqual(SqString s,SqString t){
    //判断两个字符串是否相等
    bool same = true;
    if(s.length!=t.length)  //先判断长度
        same = false;
    else
        for(int i = 0; i < s.length; i++){   //依次比较
            if(s.data[i] != t.data[i]){
                same = false;
                break;
            }
        }
    return same;
}
SqString Concat(SqString s,SqString t){
    //把字符串t连接到s后面
    SqString str;
    int i;
    str.length =s.length + t.length;
    for(i = 0; i < s.length; i++)
        str.data[i] = s.data[i];
    for(i = 0; i < t.length; i++)
        str.data[s.length+i] = t.data[i];
    return str;
}
SqString InsStr(SqString s1,int i,SqString s2){
    //从s1的第i的位置后面插入s2
    int j;
    SqString str;
    str.length = 0;
    if(i <= 0 || i > s1.length+1)
        return str;
    for(j = 0; j < i - 1; j++)
        str.data[j] = s1.data[j];
    for(j = 0; j < s2.length; j++)
        str.data[i+j-1] = s2.data[j];
    for(j = i - 1; j < s1.length; j++)
        str.data[s2.length+j] = s1.data[j];
    str.length = s1.length + s2.length;
    return str;
}
SqString RepStr(SqString s,int i,int j,SqString t){
	//用字符串t代替字符串s的第i到j位
    int k;
    SqString str;
    str.length = 0;
    if(i <= 0 || i > s.length || i + j -1 > s.length)
        return str;
    for(k = 0; k < i-1; k++)
        str.data[k] = s.data[k];
    for(k = 0; k < t.length; k++)
        str.data[i+k-1] = t.data[k];
    for(k = i + j - 1; k < s.length; k++)
        str.data[t.length+k-j] = s.data[k];
    str.length = s.length + t.length - j;
    return str;
}
SqString DelStr(SqString s,int i,int j){
    //把s的第i到j位删除
    int k;
    SqString str;
    str.length = 0;
    if(i <= 0 || i > s.length || i+j > s.length+1)
        return str;
    for(k = 0; k < i-1; k++)
        str.data[k] = s.data[k];
    for(k = i + j - 1; k < s.length; k++)
        str.data[k-j] = s.data[k];
    str.length = s.length - j;
    return str;
}
SqString SubStr(SqString s,int i,int j){
    //返回s的从第i到j的字串
    SqString str;
    int k;
    str.length = 0;
    if(i <= 0 || i > s.length || j < 0 || i+j-1 > s.length)
        return str;
    for(k = i - 1; k < i + j - 1; k++)
        str.data[k-i+1] = s.data[k];
    str.length = j;
    return str;
}

void DispStr(SqString s){
    //展示s
    if(s.length > 0){
        for(int i = 0; i < s.length; i++)
            cout << s.data[i];
        cout << endl;
    }
}

#include"sqstring.h"
int main()
{
    SqString s,s1,s2,s3,s4;
    cout << "顺序串的基本运算如下" << endl;
    cout << " (1)建立串s和串s1" << endl;
    StrAssign(s,"abcdefghijklmn");
    StrAssign(s1,"123");
    cout << " (2)输出串s:";
    DispStr(s);
    cout << " (3)输出串s的长度" << StrLength(s) << endl;
    cout << " (4)在串s的第九个字符位置插入串s1而产生串s2" << endl;
    s2 = InsStr(s,9,s1);
    cout << " (5)输出串s2:";
    DispStr(s2);
    cout << " (6)删除串s第2个字符开始的5个字符而产生的串s2" << endl;
    s2 = DelStr(s,2,3);
    cout << " (7)输出串s2:";
    DispStr(s2);
    cout << " (8)将串s第2个字符开始的5个字符替换成s1而产生的串s2" << endl;
    s2 = RepStr(s,2,5,s1);
    cout << " (9)输出串s2:";
    DispStr(s2);
    cout << " (10)提取串s的第二个字符开始的10个字符而产生串s3" << endl;
    s3 = SubStr(s,2,10);
    cout << " (11)输出串s3:";
    DispStr(s3);
    cout << " (12)将串s1和串s2连接起来而产生的串s4" << endl;
    s4 = Concat(s1,s2);
    cout << " (13)输出串s4:";
    DispStr(s4);
    DestroyStr(s);
    DestroyStr(s1);
    DestroyStr(s2);
    DestroyStr(s3);
    DestroyStr(s4);
    getchar();
    return 0;
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值