#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. [Cocos2d-x]Cocos2d-x开发中C++调用Object-c

    2013年12月29日 简介: Cocos2d-x开发过程中,难免需要通过C++调用Object-C

  2. Qt线程同步操作用QWaitCondition QMutex

    可以看到Qt提供了一个等待事件发生的类QWaitCondition,当条件满足时可以唤醒其它等待的线程. 写一个类可以在线程间实现同步功能 #ifndef THREADEVENT_H #define ...

  3. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

    C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...

  4. 我经历的IT公司面试及离职感受(转)

    毕业后几年一直待在广州,觉得这是一个比较生活化及务实的城市,其互联网公司和相应的投融资环境都不如北深上活跃,大大小小的面试也有几十个,有点规模的公司应该都面试过了,面试一般会见到主力技术人员,技术主管 ...

  5. Rudiments 0.42 发布,C++ 常用工具包 - 开源中国社区

    Rudiments 0.42 发布,C++ 常用工具包 - 开源中国社区 Rudiments 0.42 发布,C++ 常用工具包

  6. POJ 1724 ROADS(bfs最短路)

    n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...

  7. Dan计划:重新定义人生的10000个小时 - 阮一峰的网络日志

    Dan计划:重新定义人生的10000个小时 - 阮一峰的网络日志 Dan计划:重新定义人生的10000个小时

  8. HDU4685 Prince and Princess 完美搭配+良好的沟通

    意甲冠军:今天,有n王子,m公主.现在给他们配对,与王子会嫁给一个男人,他喜欢.公主无法做出选择. 这标题去咬硬,还有一类似的题目poj1904.那个题目也是给王子与公主配对,但那个是王子公主各n个, ...

  9. 9个杀手级 JVM 编程语言

    9个杀手级 JVM 编程语言 Java虚拟机已经不再是仅仅局限在 Java 了,很多语言提供了脚本转换,可以让其他的程序在java虚拟机上运行,这样能够让更多的开发者能够依靠JVM在Java平台上大有 ...

  10. poj3252(数位dp)

    题目连接:http://poj.org/problem?id=3252 题意:拆成2进制,在记录0和1的个数 求区间[a,b]中,满足传化成2进制后,0的个数>=1的个数的数字的个数... 分析 ...