zoukankan      html  css  js  c++  java
  • 字符串的基本操做

    CMyString.h

    #ifndef CMyString_h__
    #define CMyString_h__
    
    #define MAX_STRING_SIZE 1024
    
    typedef struct cMyString_def{
        int length;
        char str[MAX_STRING_SIZE];
    }CMyString;
    void InitCMyString(CMyString* cs, char* s);
    void Concatenate(CMyString* cs, CMyString* s);
    void DeleteCS(CMyString* cs, int pos, int len);
    char* GetString(CMyString* cs);
    void Insert(CMyString* cs, int pos, CMyString* s);
    CMyString SubString(CMyString* cs, const int pos, const int len);
    #endif // CMyString_h_

    CMyString.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "CMyString.h"
    
    void InitCMyString(CMyString* cs, char* s){
        char *p1, *p2;
        for (cs->length=0, p1=cs->str, p2=(char*)s; *p2 ;cs->length++){
            *(p1++) = *(p2++);
        }
        *p1 = 0;
    }
    
    
    void Concatenate(CMyString* cs, CMyString* s){
        if (cs->length+s->length <= MAX_STRING_SIZE){
            memcpy(cs->str+cs->length, s->str, s->length+1);
            cs->length += s->length;
        }
        else
            puts("error:string length overflow!
    ");
    }
    
    void DeleteCS(CMyString* cs, int pos, int len){
        int rlen = len;
        if (pos+len >cs->length)
            rlen=cs->length - pos;
        // 这句将两种情况合在一起,,,,,,TMD
        cs->length -= rlen;
        memcpy(cs->str+pos, cs->str+pos+rlen, cs->length-pos+1);
    }
    
    
    char* GetString(CMyString* cs){
        char *tmpStr = (char*)malloc(sizeof(char)*(cs->length+1));
        memcpy(tmpStr, cs->str, cs->length+1);
        return tmpStr;
    }
    
    void Insert(CMyString* cs, int pos, CMyString* s){
        if (cs->length+s->length <= MAX_STRING_SIZE){
            memcpy(cs->str+pos+s->length, cs->str+pos, cs->length-pos+1);               // 先把原字符串的后和东西复制出来
            memcpy(cs->str+pos, s->str, s->length);
            cs->length += s->length;
        }
        else
            puts("error: string  length overflow.");
    }
    
    CMyString SubString(CMyString* cs, const int pos, const int len){
        int rlen = len;
        CMyString* tmpStr=(CMyString*)malloc(sizeof(CMyString));
    
        InitCMyString(tmpStr, " ");
        if (pos+len > cs->length)
            rlen=cs->length-pos;
    
        memcpy(tmpStr->str, cs->str+pos, rlen);
        tmpStr->length = rlen;
        tmpStr->str[tmpStr->length]=0;
        return *tmpStr;
    }

    main.c

    #include "CMyString.h"
    #include <stdio.h>
    int main(){
        char str[512]="abcdefgh";
        char s[512]="xyz";
        CMyString cs, cs2;
    
        InitCMyString(&cs, str);
        printf("%s
    ", GetString(&cs));
    
        DeleteCS(&cs, 2, 3);
        printf("%s
    ", GetString(&cs));
    
        InitCMyString(&cs2, s);
        Concatenate(&cs, &cs2);
        printf("%s
    ", GetString(&cs));
    
    
        printf("Debug:
    ");
        printf("%s
    ", cs.str);
        Insert(&cs, 0,&cs2);
        printf("%s
    
    ", GetString(&cs));
    
        puts("取子串;");
        printf("%s
    ", SubString(&cs, 2,3).str);
        return 0;
    }

    运行结果:
    这里写图片描述

  • 相关阅读:
    my live health
    network / switchboard / jiaohuanji / switch
    my live boadband
    proxyServer Squid 3.5.5 / 20181111
    db mysql / mysql cluster 5.7.19 / performance
    MPTCP v0.92 Release
    MPTCP
    外国专家:区块链是新的Linux 而非新的互联网
    为什么用 Unity 3D 开发游戏是用 C# || JS 开发而不是用C++
    树莓派、 Arduino 、传统单片机开发板该如何选择?
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538357.html
Copyright © 2011-2022 走看看