服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言 数据结构与算法之字符串详解

C语言 数据结构与算法之字符串详解

2022-08-14 10:48玄澈_ C/C++

这篇文章将带大家深入了解C语言数据结构与算法中的字符串,文中主要是介绍了字符串的定义、字符串的比较以及一些串的抽象数据类型,感兴趣的可以学习一下

C语言 数据结构与算法之字符串详解

 

串的定义

零个或多个字符组成的有限序列

C语言 数据结构与算法之字符串详解

C语言 数据结构与算法之字符串详解

 

串的比较 

串的比较实际上是在比较串中字符的编码

存在某个k < min(n,m),使得ai = bi (i = 1,2,3,4..k)

如果 ak < bk  -->  那么srt1 < srt2 (反之也成立)

除去相等的字符,在第一个不相等的字符位置以Ascii码进行比较

 

串的抽象数据类型

C语言 数据结构与算法之字符串详解

串的顺序存储结构示意图

C语言 数据结构与算法之字符串详解

串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列 

C语言 数据结构与算法之字符串详解

typedef struct sqString{
    char* ch;  //若串为空,则按串长分配存储区  
               //否则ch = NULL
    int length;//串长
}sqString;

 

串的初始化

 

相关定义初始化

C语言 数据结构与算法之字符串详解

/** 状态码  **/
#define TRUE 1
#define FALSE 0
#define EQ 0
#define GT 1  //大于
#define LT -1 //小于

 

定长类初始化

C语言 数据结构与算法之字符串详解

#define MAX_SIZE 1024
typedef struct{
    char ch[MAX_SIZE + 1];  
    //定长方式实现了字符串的顺序结构--缺点是浪费空间
    int length;
 
}SString;

 

串的堆式顺序存储结构(Heap)

C语言 数据结构与算法之字符串详解

/** 串的堆式顺序存储结构(Heap)**/
typedef struct{
    char * ch;  
    //如果是非空串,那么就按照指定长度分配内存,否则ch就指向NULL
    int length;   //串当前长度
}HString;

 

初始化堆字符串 

 

赋值操作

/** 为串str赋值,值为字符串常量chars **/
void StrAssign_HeapString(HString * str,char * chars){
    int len = strlen(chars);
    if(!len) return ERROR;
    InitString_HeapString(str);
    //动态为字符串分配空间
    str->ch = (char*)malloc(len * sizeof(char));
    if(!str->ch){
        exit(OVERFLOW); //内存溢出,分配失败
    }
    //逐个将字符串输入所分配的空间中
    for(int i = 0;i < len ; i++)
    {
        str->ch[i] = chars[i];
    }
    str->length = len;  //将长度赋值
    return OK;    
}

 

比较两个堆字符串的大小

str1 == str2 返回0 ; str1 < str2 返回-1 ; str1 > str2 返回1

Status Strcmp_HeapString(HString * str1,HString * str2){
    for(int i = 0;i < str->length && i < str2->length; i ++){
        //遇到不同的字符就直接比较Ascii
        if(str->ch[i] != str[2]->ch[i]){
                //大于则返回整数,小于则返回负数
            return str->ch[i] - str[2]->ch[i];
        }
    }
    //字符都相等但是长度不等,就比较长度
    return str1->length - str2->length;
}

到此这篇关于C语言 数据结构与算法之字符串详解的文章就介绍到这了,更多相关C语言 字符串内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/forever_bryant/article/details/122369194

延伸 · 阅读

精彩推荐
  • C/C++C++使用string的大数除法运算(4)

    C++使用string的大数除法运算(4)

    这篇文章主要为大家详细介绍了C++使用string的大数除法运算,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    好想告诉你wt9862021-08-02
  • C/C++Qt CEF融合技QCefView使用教程(推荐)

    Qt CEF融合技QCefView使用教程(推荐)

    QCefView是一个与Chromium Embedded Framework集成的Qt第三方开源库,LGPL许可,可以在项目中免费使用,功能类似CEF、QWebEngineView,提供C++和web交互的能力,本文给大...

    令狐掌门5882022-07-13
  • C/C++C语言获取Shell返回结果的实现方法

    C语言获取Shell返回结果的实现方法

    下面小编就为大家带来一篇C语言获取Shell返回结果的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C语言教程网8562021-04-08
  • C/C++Qt 中开启线程的多种方式小结

    Qt 中开启线程的多种方式小结

    本篇文章就来整理一下 Qt 中使用线程的五种方式,方便后期回顾。前面两种比较简单,一笔带过了,主要介绍后面三种,感兴趣的朋友跟随小编一起看看吧...

    lucky-billy10652021-12-27
  • C/C++数组和指针的区别深入剖析

    数组和指针的区别深入剖析

    在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的...

    C语言教程网2642020-11-11
  • C/C++c语言尾队列tailq使用示例分享

    c语言尾队列tailq使用示例分享

    这篇文章主要介绍了c语言尾队列tailq使用示例,大家参考使用吧...

    C语言教程网7032021-01-14
  • C/C++全面解析C++中的析构函数

    全面解析C++中的析构函数

    这篇文章主要介绍了C++中的析构函数,为C++入门学习中的基础知识,需要的朋友可以参考下...

    C++教程网8122021-03-23
  • C/C++C语言实现简单扫雷源码

    C语言实现简单扫雷源码

    这篇文章主要为大家详细介绍了C语言实现简单扫雷源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    w_yl1233682021-11-02