数据结构c字符串操作语言版本

简介:
#include<stdio.h>
#include<malloc.h>
#include<string.h>


//结构的定义字符串
typedef struct {


char *str;//字符串
int maxLength;//最大能够存放字符的长度
int length;//眼下的字符长度
}DString;




//1.初始化操作
//初始化操作用来建立和存储串的动态数组空间以及给相关的数据域赋值
void Initiate(DString *s,int max,char *string){


int i;
s->str=(char *)malloc(sizeof(char)*max);//申请动态存储空间
s->maxLength=max;//动态数组元素的最大的个数
s->length=strlen(string);//置串的当前长度
for(i=0;i<s->length;i++){//进行for循环赋值

s->str[i]=string[i];//赋值
}
}




//2.插入子串操作
int Insert(DString *s,int pos,DString t){
//在主串s的pos位置插入子串t。插入成功返回1,失败返回0
int i;
if(pos<0){

printf("參数pos的位置出错,pos<0\n");
return 0;
}else{
//假设空间不够,则进行从新分配空间
if(s->length+t.length>s->maxLength){

//又一次申请s->str所指的数组空间。原数组元素存放在新数组的前面
realloc(s->str,(s->length+t.length)*sizeof(char));
s->maxLength=s->length+t.length;//最大的长度变了
}


for(i=s->length-1;i>=pos;i--){
//依次往后移动t.length个位置
s->str[i+t.length]=s->str[i];
}


//在pos位置进行插入操作
for(i=0;i<t.length;i++){

s->str[pos+i]=t.str[i];//插入


}


s->length=s->length+t.length;//置新的数据元素的位置
return 1;
}
}






//3.删除子串操作
int Delete(DString *s,int pos,int len){
//删除主串s从pos位置開始的长度为len的子串。删除成功则返回1,失败则返回0
int i;
if(s->length<=0){
printf("数组中未存放字符无元素可删!\n");
return 0;
}else if(pos<0||len<0||pos+len>s->length){

printf("參数pos和len不合法!\n");
return 0;
}else{

for(i=pos+len;i<=s->length-1;i++){

s->str[i-len]=s->str[i];//依次前移len歌位置
}


s->length=s->length-len;//置新的元素的个数
return 1;
}




}






//4.取子串操作
int SubString(DString *s,int pos,int len,DString *t){
//取主串从pos位置開始的长度为len的子串。取成功则返回1。失败则返回0
int i;
if(pos<0||len<0||pos+len>s->length){

printf("參数pos和len的位置出错!!!\n");
return 0;
}
//当t的空间不够的时候,在进行从新分配空间
if(len>t->maxLength){

t->str=(char *)realloc(t->str,len*sizeof(char));//又一次申请数组空间
t->maxLength=len;
}


for(i=0;i<len;i++){

t->str[i]=s->str[pos+i];//取子串
}


t->length=len;
return 1;


}






//5.撤销操作
void Destroy(DString *s){


//撤销串s占用的内存空间
free(s->str);
s->maxLength=0;
s->length=0;
}


int main(){


DString myString1,myString2,myString3;
int i,max1=5,max2=9,max3=0;
//測试初始化函数
Initiate(&myString1,max1,"Data");
Initiate(&myString2,max2," Structure");
Initiate(&myString3,max3,"");


printf("初始化myString2串:        ");
for(i=0;i<myString2.length;i++)
printf("%c",myString2.str[i]);
printf("    maxLength=%d",myString2.maxLength);
    printf("    length=%d\n",myString2.length);


//測试插入函数
Insert(&myString2,0,myString1);
printf("插入子串后myString2串:  ");
for(i=0;i<myString2.length;i++)
printf("%c",myString2.str[i]);
printf("    maxLength=%d",myString2.maxLength);
    printf("    length=%d\n",myString2.length);


//測试删除函数
Delete(&myString2,0,5);
    printf("删除子串后myString2串:  ");
for(i=0;i<myString2.length;i++)
printf("%c",myString2.str[i]);
printf("    maxLength=%d",myString2.maxLength);
    printf("    length=%d\n",myString2.length);




//測试取子串函数
SubString(&myString2,0,5,&myString3);
printf("取子串后myString3串:  ");
for(i=0;i<myString3.length;i++)
printf("%c",myString3.str[i]);
printf("    maxLength=%d",myString3.maxLength);
    printf("    length=%d\n",myString3.length);






////////////////////////////
    for(i=0;i<myString2.length;i++)
printf("%c",myString2.str[i]);
printf("    maxLength=%d",myString2.maxLength);
    printf("    length=%d\n",myString2.length);




//測试撤销函数
//Destroy(&myString1);
    //Destroy(&myString2);
//Destroy(&myString3);
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4885771.html,如需转载请自行联系原作者


相关文章
|
14天前
|
XML JSON NoSQL
Redis的常用数据结构之字符串类型
Redis的常用数据结构之字符串类型
19 0
|
4月前
|
设计模式 算法 Java
【数据结构和算法】确定两个字符串是否接近
这是力扣的1657题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。复杂度分析:时间复杂度:O(max⁡{n1,n2}+Clog⁡C),其中 n1 和 n2 分别是字符串 word1 和 word2 的长度,C=26 是字符集大小。空间复杂度:O(C)。
40 1
|
5月前
|
存储 算法 NoSQL
【霍罗维兹数据结构】多维数组 | 字符串 | 模式匹配
【霍罗维兹数据结构】多维数组 | 字符串 | 模式匹配
37 0
|
9天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
49 0
|
28天前
|
存储 算法 程序员
【数据结构】【版本2.0】【树形深渊】——二叉树入侵
【数据结构】【版本2.0】【树形深渊】——二叉树入侵
|
28天前
|
存储 算法
【数据结构】【版本1.0】【线性时代】——顺序初现
【数据结构】【版本1.0】【线性时代】——顺序初现
【数据结构】【版本1.0】【线性时代】——顺序初现
|
5月前
|
Cloud Native Go
GO语言初始化数据结构的方法你知道吗?
GO语言初始化数据结构的方法你知道吗?
|
2月前
|
算法 Java 索引
数据结构之串—字符串而不是羊肉串
数据结构之串—字符串而不是羊肉串
34 0
|
2月前
|
存储 算法 Java
【数据结构与算法】5.详解双向链表的基本操作(Java语言实现)
【数据结构与算法】5.详解双向链表的基本操作(Java语言实现)
|
3月前
|
算法 Java C++
数据结构与算法面试题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。(提示:使用动态规划或者中心扩散)
数据结构与算法面试题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。(提示:使用动态规划或者中心扩散)
41 0