C語言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解
串的定義
零個或多個字符組成的有限序列
串的比較
串的比較實(shí)際上是在比較串中字符的編碼
存在某個k < min(n,m),使得ai = bi (i = 1,2,3,4..k)
如果 ak < bk --> 那么srt1 < srt2 (反之也成立)
除去相等的字符,在第一個不相等的字符位置以Ascii碼進(jìn)行比較
串的抽象數(shù)據(jù)類型
串的順序存儲結(jié)構(gòu)示意圖
串的順序存儲結(jié)構(gòu)是用一組地址連續(xù)的存儲單元來存儲串中的字符序列
typedef struct sqString{ char* ch; //若串為空,則按串長分配存儲區(qū) //否則ch = NULL int length;//串長 }sqString;
串的初始化
相關(guān)定義初始化
/** 狀態(tài)碼 **/ #define TRUE 1 #define FALSE 0 #define EQ 0 #define GT 1 //大于 #define LT -1 //小于
定長類初始化
#define MAX_SIZE 1024 typedef struct{ char ch[MAX_SIZE + 1]; //定長方式實(shí)現(xiàn)了字符串的順序結(jié)構(gòu)--缺點(diǎn)是浪費(fèi)空間 int length; }SString;
串的堆式順序存儲結(jié)構(gòu)(Heap)
/** 串的堆式順序存儲結(jié)構(gòu)(Heap)**/ typedef struct{ char * ch; //如果是非空串,那么就按照指定長度分配內(nèi)存,否則ch就指向NULL int length; //串當(dāng)前長度 }HString;
初始化堆字符串
賦值操作
/** 為串str賦值,值為字符串常量chars **/ void StrAssign_HeapString(HString * str,char * chars){ int len = strlen(chars); if(!len) return ERROR; InitString_HeapString(str); //動態(tài)為字符串分配空間 str->ch = (char*)malloc(len * sizeof(char)); if(!str->ch){ exit(OVERFLOW); //內(nèi)存溢出,分配失敗 } //逐個將字符串輸入所分配的空間中 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]){ //大于則返回整數(shù),小于則返回負(fù)數(shù) return str->ch[i] - str[2]->ch[i]; } } //字符都相等但是長度不等,就比較長度 return str1->length - str2->length; }
到此這篇關(guān)于C語言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解的文章就介紹到這了,更多相關(guān)C語言 字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(55.跳躍游戲)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(55.跳躍游戲),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07在c和c++中實(shí)現(xiàn)函數(shù)回調(diào)
如何在c和c++中實(shí)現(xiàn)函數(shù)回調(diào)呢?現(xiàn)在小編就和大家分享一下在c/c++中實(shí)現(xiàn)函數(shù)回調(diào)的示例代碼,需要的朋友可以參考下2013-07-07Visual?Studio2022配置ReSharper?C++?常用設(shè)置方法
這篇文章主要介紹了Visual?Studio2022配置ReSharper?C++?常用設(shè)置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),文中介紹了卸載Resharper的方法及Resharper激活碼,感興趣的朋友參考下吧2024-01-01