数据结构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;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
数据结构c字符串操作语言版本的更多相关文章
- 如何使用RedisTemplate访问Redis数据结构之字符串操作
Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- 面试之C语言字符串操作总结大全(转载)
趁着十一就好好补补数据结构吧,通信这个不软不硬的专业,现在还是得好好学学补习补习,,你这个非211的本科生!虽然拿到了一个offer,但是觉得时间还有,得继续拼一拼,希望不辜负! 1)字符串操作 st ...
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...
- Redis 数据结构之字符串的那些骚操作
Redis 字符串底层用的是 sds 结构,该结构同 c 语言的字符串相比,其优点是可以节省内存分配的次数,还可以... 这样写是不是读起来很无聊?这些都是别人咀嚼过后,经过一轮两轮三轮的再次咀嚼,吐 ...
- 零基础学习C语言字符串操作总结大全
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...
- C语言字符串操作总结大全
1)字符串操作 strcpy(p, p1) 复制字符串 函数原型strncpy(p, p1, n) 复制指定长度字符串 函数原型strcat(p, p1) 附加字符串 函数原型strn ...
- c语言的字符串操作(比较详细)
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...
随机推荐
- POJ 1742 hdu 2844 Coins
题目链接:http://poj.org/problem?id=1742 http://acm.hdu.edu.cn/showproblem.php?pid=2844 题目分类:动态规划 代码: #in ...
- 鼠标右键怎么清除Catalyst Control Center
开始→运行→regedit→找到HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ACE→双击并修改其键值 可以删除 ...
- android 在你的UI中显示Bitmap - 开发文档翻译
由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接 Displaying Bitmaps in Your UI 在你的UI中显示Bitmap ...
- 只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案
ajax调用webservice中的接口时, 会出现[只能从脚本中调用在类定义上有[ScriptService]属性的...]的异常. 这是因为, 在.net3.5中, 访问web服务, 要对web服 ...
- pan
百度云盘地址第一季http://pan.baidu.com/share/link?shareid=198342&uk=1191518428第二季http://pan.baidu.com/sha ...
- Android LCD(三):Samsung LCD接口篇
关键词:android LCD控制器 Framebuffer PWM 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:samsung exy ...
- H3C低端交换机MAC绑定
1.MAC地址和端口的绑定<h3c>system[h3c]interface e0/1[h3c-interface]mac-address max-count #关闭交换机端口的MAC学习 ...
- Cocos2d-x3.0 Button
Size widgetSize = Director::getInstance()->getWinSize(); Text* alert = Text::create("Layout& ...
- hdu2222Keywords Search (特里)
Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...
- __iomem解析
以下是在学习电池驱动中遇到的知识点之_iomem A new I/O memory access mechanism Most reasonably current cards for the PCI ...