#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. POJ 1159 - Palindrome 优化空间LCS

    将原串和其逆序串的最长公共子序列求出来为M..那么2*n-M就是所需要加的最少字符..因为求出的M就是指的原串中"潜伏"的最长回文.. 问题转化为求LCS..但是n最大到5000. ...

  2. 给工程师的 10 条哲理(浅薄者迷信运气,强者相信因果,软件复制成本为零,文凭不重要,AWS使得创业成本为零,每个手机都是口袋里的强大电脑)

    无论是主题分布式数据库,微服务,Soylent,尤伯杯,或者矮人要塞,我们试图从物质分离出来炒作,推迟叙事的客人.与尊重有软件工程日报的社论部分客观性. 一位渠道的成员说,“当软件工程每日的意见公布, ...

  3. dsp下基于双循环缓冲队列的视频采集和显示记录

    对最近在设计的视频采集和显示缓冲机制做一个记录,以便以后使用. 视频采集和显示缓冲机制,其实是参考了Linux下v4L2的驱动机制,其采用输入多缓冲frame,输出多缓冲的切换机制.简单的就是ping ...

  4. UVA 620 Cellular Structure (dp)

     Cellular Structure  A chain of connected cells of two types A and B composes a cellular structure o ...

  5. Docker 用法总结之:管理工具 shipyard 的具体使用指南

    Docker 的命令行就已经非常好用了,假设非要加上基于 Web 的管理界面的话也有一些选择,如 DockerUI (Angular.js), Dockland (Ruby), Shipyard (P ...

  6. cocos2d-x 消类游戏,类似Diamond dash 设计

    前几天刚刚在学习cocos2d-x,无聊之下自己做了一个类似Diamond dash的消类游戏,今天放到网上来和大家分享一下.我相信Diamond dash这个游戏大家都玩过,游戏的规则是这样的,有一 ...

  7. SPARK如何使用AKKA实现进程、节点通信

    SPARK如何使用AKKA实现进程.节点通信 <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 < ...

  8. 7款开源Java反编译工具

    今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...

  9. WPF疑难杂症会诊

    原文:WPF疑难杂症会诊 为什么图片像素是模糊的? 容器边框设为非整数时,其内容中的像素图片会产生模糊,即使设置SnapsToDevicePixels="True"也无效. 以下是 ...

  10. Netbeans源代码编辑技巧——使用代码补全和代码生成

    原文 Netbeans源代码编辑技巧——使用代码补全和代码生成 使用代码补全生成代码 一般来说,代码补全对于自动填充缺失的代码是有帮助的,例如标识符和关键字.截至 NetBeans IDE 6.0,您 ...