#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;

}

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

数据结构c字符串操作语言版本的更多相关文章

  1. 如何使用RedisTemplate访问Redis数据结构之字符串操作

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  2. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  3. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  4. 面试之C语言字符串操作总结大全(转载)

    趁着十一就好好补补数据结构吧,通信这个不软不硬的专业,现在还是得好好学学补习补习,,你这个非211的本科生!虽然拿到了一个offer,但是觉得时间还有,得继续拼一拼,希望不辜负! 1)字符串操作 st ...

  5. C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...

  6. Redis 数据结构之字符串的那些骚操作

    Redis 字符串底层用的是 sds 结构,该结构同 c 语言的字符串相比,其优点是可以节省内存分配的次数,还可以... 这样写是不是读起来很无聊?这些都是别人咀嚼过后,经过一轮两轮三轮的再次咀嚼,吐 ...

  7. 零基础学习C语言字符串操作总结大全

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

  8. C语言字符串操作总结大全

    1)字符串操作 strcpy(p, p1)  复制字符串  函数原型strncpy(p, p1, n)   复制指定长度字符串  函数原型strcat(p, p1)   附加字符串  函数原型strn ...

  9. c语言的字符串操作(比较详细)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

随机推荐

  1. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  2. JEECG开源团队招募新成员 2014年

    JEECG开源团队招募新成员 2014年 截止日期:2014-06-01        JEECG开源项目 是一款基于代码生成器的微云高速开发平台.提供企业高速开发和採用微信实现移动应用的解决方式.J ...

  3. Android 实现环形进度按钮circular-progress-button

    ※效果 ※简单介绍 显示运行进度的button,可用于数据的提交.系统登录等.动画效果非常棒.提高用户体验. ※使用说明 Declare button inside your layout XML f ...

  4. 7.MongoDB java CRUD

    注意:要增加mongodb对应的jar包 package cn.toto.mongodb; import java.net.UnknownHostException; import org.bson. ...

  5. 如何禁止使用teamviwer的使用

    前几天有人问我teamviwer怎么禁止,刚开始做实验的时候过滤了teramviwer.com解析出来的IP,可是还是没有用,其实将teamviwer登陆的服务器地址在路由器上过滤,teramviwe ...

  6. 09_android入门_採用android-async-http开源项目的GET方式或POST方式实现登陆案例

    依据08_android入门_android-async-http开源项目介绍及用法的介绍,我们通过最常见的登陆案例进行介绍android-async-http开源项目中有关类的使用.希望对你学习an ...

  7. Libgdx: 将Texturepacker打包的PNG图片还原成一张一张的单个的

    你是否发现用Texturepacker在打包压缩资源文件之后. 把原稿文件弄丢了,可是又要添加新的小png的时候,却无从下手了,本文就是博主在遇到这个问题后百度了非常多方法,可惜仅仅有plist格式的 ...

  8. 道破Redis的VM

    原创文章是freas_1990.转载请注明出处:http://blog.csdn.net/freas_1990/article/details/42052813 Redis唯一的那个key的value ...

  9. centos下ant的安装

    1.创建一个文件夹,用于安装ant.我们这里临时在/usr文件夹下创建ant文件夹. 2.下载 cd /usr/ant进入该文件夹,使用wget  ant的下载地址  下载ant到当前文件夹下.附an ...

  10. App如何选择移动广告平台的开发者3 - 选择标准广告平台

    App开发公司.通常他们不能走品牌.要挑品牌的能力,我们将面临两大问题:业务团队.广告填充率.一系列的问题,以现金周期. 无线商务本才刚刚开始,大多数都是没有商业经验.产品.设计.运营.销售的人才都不 ...