#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. robots.txt禁止搜索引擎收录

    禁止搜索引擎收录的方法         一.什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息. 您可以在您的网站中创建一个纯文 ...

  2. java学习笔记09--反射机制

    java学习笔记09--反射机制 什么是反射: 反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取他所有的成员变量和方法并且显示出来 ...

  3. 【机器学习】SVM核函数

    知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2.  Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...

  4. poj 2513 连接火柴 字典树+欧拉通路 好题

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27134   Accepted: 7186 ...

  5. unity3D的FingerGestures小工具

    夹 FingerGestures包结构 FingerGestures样例列表 设置场景 教程:识别一个轻敲手势 教程:手势识别器 教程:轻击手势识别器 教程:拖拽手势识别器 教程:滑动手势识别器 教程 ...

  6. 命令含执行JAVA程序

    1.当类没有包名时 javac Test.java java Test   2.当有包名情况下 package com.me.Test; javac -d . Test.java java com.m ...

  7. C#的百度地图开发(二)转换JSON数据为相应的类

    原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...

  8. HTML解析HtmlAgilityPack

    原文:HTML解析HtmlAgilityPack //解析页面源代码            Uri surl = new Uri(url);            Uri uriCategory = ...

  9. 解决方式:QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins

    在用QSqlDatabase时遇到报错QSqlDatabase: an instance of QCoreApplication is required for loading driver plug ...

  10. Codeforces 4A-Watermelon(意甲冠军)

    A. Watermelon time limit per test 1 second memory limit per test 64 megabytes input standard input o ...