生活随笔
收集整理的這篇文章主要介紹了
【数据结构基础】-串-顺序结构的基本操作实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019.10.12
數(shù)據(jù)結(jié)構(gòu)中串的基本操作實現(xiàn),包括串的定義,串的初始化,賦值,獲取串的長度,串的比較,連接串,求子串,清空串。
語言:c語言
運行環(huán)境:dev
#include <stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0typedef int Status;//數(shù)據(jù)結(jié)構(gòu)-串
typedef struct {//指向串的首地址char *ch;//串的長度int length;
} SString;//串的初始化,分配空間
Status SStringInit(SString *str) {str->length =0;str->ch=NULL;return OK;
}//將ch的值復制到str中
Status SStringAssign( SString & str ,char * ch) {int len = 0;char * c = ch;//求串長,計算需要給str分配多大空間,len=ch的長度+1while (*c) {++len;++c;}str.ch = (char *)malloc(sizeof(char)*(len + 1));if(str.ch ==NULL)//空間分配失敗return 0;else {c = ch;for(int i = 0; i <= len ; ++i,++c)str.ch[i] = *c;str.length = len;return 1;}
}//獲取串的長度
Status GetSStringLength(SString str) {return str.length;
}//串比較,
Status StrCompare(SString str1,SString str2) {for(int i = 0; i <str1.length && i < str2.length; ++i)if(str1.ch[i] != str2.ch[i])return str1.ch[i] - str2.ch[i];return str1.length - str2.length;
}//連接str1,str2,并且將其儲存到str中
Status Concat(SString str1, SString str2, SString &str) {//先給str分配空間,大小為str1+str2str.ch=(char *)malloc(sizeof(char)*(str1.length+str2.length+1));if(str.ch==NULL) {printf("分配空間失敗!");return ERROR;}//定義i,j,一個輔助str1的轉(zhuǎn)移,另一個輔助str2的轉(zhuǎn)移,最后將str.length=i+j, 并且str.ch[i+j]='\0';int i=0,j=0;while(i<str1.length) {str.ch[i]=str1.ch[i];i++;}while(j<str1.length) {str.ch[i+j]=str2.ch[j];j++;}str.ch[i+j]='\0';str.length = str1.length+str2.length;return OK;
}//求子串:從主串str里的第pos位置后開始,依次把len個元素作為子串substr
Status GetSubString(SString str,int pos, int len, SString &substr) {//判斷該位置是否合理if(pos<0||pos>str.length) {printf("輸入的起始位置不合法!");return ERROR;}//如果substr.ch之前已經(jīng)分配過空間了,便將其釋放,使指針指向null,重新分配空間if(substr.ch) {free(substr.ch);substr.ch=NULL;}//為str分配空間,空間大小為lensubstr.ch=(char *)malloc(sizeof(char)*(len+1));//int i=pos,j=0;while(i<pos+len) {substr.ch[j]=str.ch[i];i++;j++;}substr.ch[j]='\0';substr.length=len;return OK;
}//清空串
Status ClearString(SString &str) {if(str.ch) {free(str.ch);str.ch=NULL;}str.length=0;return OK;
}int main() {SString str1,str2,str;SStringInit(&str1);printf("str1初始化:%s %d\n",str1.ch,str1.length);SStringInit(&str2);printf("str2初始化:%s %d\n",str2.ch,str2.length);SStringAssign(str1,"hello world");printf("填充內(nèi)容:%s 長度:%d\n",str1.ch,str1.length);SStringAssign(str2,"hello world1");printf("填充內(nèi)容:%s 長度:%d\n",str2.ch,str2.length);printf("str1的長度為:%d\n",GetSStringLength(str1));printf("兩個串是否相等?:%d (0代表相等,其余值代表不相等)\n",StrCompare(str1,str2));Concat(str1,str2,str);printf("str1與str2連接后:%s\n",str.ch);GetSubString(str1,0,5,str);printf("str1從0到5的內(nèi)容:%s\n",str.ch);ClearString(str);printf("清除串str:%s %d\n",str.ch,str.length);return 0;
}
總結(jié)
以上是生活随笔為你收集整理的【数据结构基础】-串-顺序结构的基本操作实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。