串的堆分配储存表示
typedef struct {
char* ch;//若是非空字符串,则按串长分配存储区,否则ch为NULL
int length;//串长度
} HString;
生成一个其值等于串常量的串
HString StrAssign(HString Str, char* chars) {
//生成一个其值等于串常量的chars的串T
if (Str.ch) {
//释放T的空间
free(Str.ch);
}
int len = 0;
printf_s("chars=%s\n", chars);
while (1) {
len++;
if (chars[len] == '\0') {
//TODO
break;
}
}
if (!len) {
//长度为0为ch赋NULL值
Str.ch = NULL;
Str.length = 0;
}
else {
if (!(Str.ch = (char*)malloc(len * sizeof(char)))) {
//空间不足退出
exit(ERROR);
}
for (int i = 0; i <= len - 1; i++) {
//TODO
Str.ch[i] = chars[i];
}
Str.ch[len] = '\0';
printf("Str.ch=%s\n", Str.ch);
Str.length = len;
}
return Str;
}
比较字符串
int StrCompares(HString S, HString T) {
// 若S>T,则返回值>0;若S<T,则返回值=0,若S<T,则返回值<0
printf_s("123\n");
for (int i = 0; i <= S.length && i < T.length; ++i) {
//TODO
if (S.ch[i] != T.ch[i]) {
//TODO
return S.ch[i] - T.ch[i];
}
}
return S.length - T.length;
}
清空串
HString ClearString(HString S) {
// 将S清为空串
if (S.ch) {
//TODO
free(S.ch);
S.ch = NULL;
}
S.length = 0;
return S;
}
链接新串
HString Concat(HString T, HString S1, HString S2) {
//用T返回由S1和S2链接而成的新串
if (T.ch)
{
free(T.ch);//释放旧空间
}
if (!(T.ch = (char*)malloc((S1.length + S2.length) * sizeof(char))))
{
exit(ERROR);
}
for (int i = 0; i < S1.length; i++)
{
printf("i=%d\n", i);
T.ch[i] = S1.ch[i];
} T.length = S1.length + S2.length;
for (int i = S1.length; i < T.length; i++)
{
T.ch[i] = S2.ch[i - S1.length];
}
T.ch[T.length] = '\0';
return T;
}
用Sub返回串S的第pos个字符起长度为len的子串
HString SubString(HString Sub, HString S, int pos, int len) {
//用Sub返回串S的第pos个字符起长度为len的子串
//其中,1<=pos<=StrLength(S)&&0<=len<=StrLength(S)-pos+1
if (pos<1 || pos>S.length || len<0 || len>S.length - pos + 1)
{
exit(ERROR);
}
if (Sub.ch)
{
//释放旧空间
free(Sub.ch);
}
if (!len)
{
//空子串
Sub.ch = NULL;
Sub.length = 0;
}
else
{
Sub.ch = (char*)malloc(len * sizeof(char));
int lengthNum = 0;
int posNum = 1;
while (1)
{
Sub.ch[lengthNum] = S.ch[posNum];
lengthNum++;
posNum++;
if (posNum == pos + len && posNum <= S.length)
{
break;
}
}
Sub.length = len;
Sub.ch[len] = '\0';
}
return Sub;
}

C语言数据结构串的表示与操作的实现的更多相关文章

  1. 数据结构- 串的模式匹配算法:BF和 KMP算法

      数据结构- 串的模式匹配算法:BF和 KMP算法  Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字 ...

  2. C语言中关于对目录的操作

    原文地址:C语言中关于对目录的操作 目录的操作不论是在嵌入式产品还是应用软件编程都是必不可少的,不同的开发语言可能略有不同,笔者主要是讨论在Linux平台下对目录的一系列操作: 1.获取当前目录操作: ...

  3. C语言第十二讲,文件操作.

    C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...

  4. c语言,数据结构,链表的一些操作总结

    下面是自己的一些学习操作以及总结,能用我会很开心,有不足之处,欢迎大家提出宝贵的意见! c语言链表是一种基本的数据结构,与顺序表一样属于线性表,但是顺序表在内存中的存储单元是连续的,这样就对内存的要求 ...

  5. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  6. C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...

  7. C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...

  8. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

  9. C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-栈的实现-C语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...

  10. C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...

随机推荐

  1. ArcObjects SDK 012 PageLayout和Page

    1.从ArcMap角度看结构 一个Mxd文件包含一个PageLayout对象和一个多多个Map对象,每个Map会被包成MapFrame,添加到PageLayout中.我们用ArcMap打开一个mxd文 ...

  2. 【机器学习】李宏毅——卷积神经网络CNN

    CNN我们可以从两个角度来理解其中的具体过程 Neuron Version Story(解释版本1) 对于图像分类,其具体的流程如下所示: 将一张图像作为模型的输入,输出经过softmax之后将与理想 ...

  3. 手写promise解决回调地狱问题

    在介绍promise之前我们先来看一段代码: 根据案例我们可以看出,这段代码可以无限的嵌套下去,但是每嵌套一层,代码的运行就会降低,而解决回调地狱最好的办法就是new promise 一.什么是 pr ...

  4. CVE-2020-1938与CVE-2020-13935漏洞复现

    前言 最近在腾讯云上买了个服务器,准备用来学习.在安装了7.0.76的tomcat后,腾讯云提醒我存在两个漏洞,分别是CVE-2020-1938和CVE-2020-13935,在修复完漏洞后,准备复现 ...

  5. Lombok介绍和配置

    什么是Lombok Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发. 官网: https://www.projectlombok.org/ Lombok的作用 通过 添加注 ...

  6. WCF 服务容器化的一些问题

    背景 目前项目当中存有 .NET Framework 和 .NET Core 两种类型的项目,但是都需要进行容器化将其分别部署在 Windows 集群和 Linux 集群当中.在 WCF 进行容器化的 ...

  7. 如何通过Java应用程序将Word转为Excel

    平时在工作中,很多小伙伴会习惯性地将文件保存为Word文档格式,但有时会发现某些文件如果保存成Excel表格可能会更好地呈现.例如有的文本在Word文本中不如在Excel工作表编辑计算方便,所以要把W ...

  8. 数据分析中的SQL如何解决业务问题

    本文来自知乎问答. 提问:数据分析人员需要掌握sql到什么程度? 请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗? ...

  9. Java进阶篇——设计模式

    设计模式 一.代理模式 使用代理类对真实对象进行代理,包括真实对象方法的调用.功能的扩展等.访问的时候也只能访问到代理对象,既保护了真实对象同时可以在原始对象上进行扩展.类似于中介在卖家和买家之间的角 ...

  10. 【RocketMQ】消息拉模式分析

    RocketMQ有两种获取消息的方式,分别为推模式和拉模式. 推模式 推模式在[RocketMQ]消息的拉取一文中已经讲过,虽然从名字上看起来是消息到达Broker后推送给消费者,实际上还是需要消费向 ...