91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現串的順序存儲表示與基本操作

發布時間:2021-09-24 10:48:56 來源:億速云 閱讀:247 作者:小新 欄目:開發技術

小編給大家分享一下C語言如何實現串的順序存儲表示與基本操作,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1 串的三種存儲表示

串,即:字符串。要注意的是,C語言中是沒有字符串數據類型的,而將其作為一種數據結構——“內容受限的線性表”進行實現,并對空串、空格串、串的長度、子串與主串等概念進行了約定。

串的存儲表示主要分為三種:

【1】順序存儲表示 :使用字符型數組(一塊連續的內存存儲空間)來存儲串的內容,其最大長度已經定義則不可修改;(這也是C語言中初始約定好的一種較為字符串內容的表示方式)

【2】堆分配存儲表示:使用malloc和free函數對堆區進行操作,進行堆區內存的動態分配與釋放,而這塊存儲空間就用于存儲串的內容;

【3】塊鏈存儲表示:即采用鏈表的形式,通過指針,將位于不同存儲空間的多個字符串“碎片”進行連接,“拼湊”成為一個完整的串

在此只介紹第一種,即:串的順序存儲表示。

2 串的順序存儲表示與基本操作

這部分就直接貼代碼了

【因為這里是對數組元素的操作,就偷個懶,直接用了C語言string.h頭文件中提供的一些庫函數,對一些基本操作進行了簡單實現。需要詳細寫代碼的部分到串的堆分配實現時候再體現】

2.1 頭文件聲明

/**
 * 串的順序存儲實現
 */
#include <string.h>
#define  MAXLEN 255
//結構體定義-表示串結構體
typedef struct{
 char ch[MAXLEN+1];//存儲串內容的字符型數組[+1是為了存儲結束標志'\0']
 int length;//當前串的長度
}SString;

/**
 * 將字符串T復制為chars
 */
int StrAssignS(SString* T,char* chars);

/**
 * 獲取字符串長度
 */
int StrLengthS(SString T);

/**
 * 字符串的判空操作
 */
int StrIsEmptyS(SString T);

/**
 * 串連接操作
 */
int StrConcatS(SString* T,char* s1,char* s2);

/**
 * 截取子串
 */
int SubStringS(SString* T,SString src,int pos,int len);

/**
 * 串清空
 */
int ClearStringS(SString* T);

/**
 * 串比較
 */
int StrCompareS(SString T1,SString T2);

2.2 函數實現

#include "SString.h"

/**
 * 將字符串T復制為chars
 */
int StrAssignS(SString* T,char* chars){
 //清空原始內容
 memset(T->ch,0,MAXLEN);
 T->length=0;
 //重新賦值為chars
 strcpy(T->ch,chars);
 T->length=(int)strlen(chars);
 /*printf("len=%d\n",strlen(T->ch));*/
 return 0;
}

/**
 * 字符串的判空操作
 */
int StrIsEmptyS(SString T){
 return T.length==0;
}


/**
 * 獲取字符串長度
 */
int StrLengthS(SString T){
 return T.length;
}

/**
 * 串連接操作
 */
int StrConcatS(SString* T,char* s1,char* s2){
 //輔助變量
 char *p;
 //清空T中的內容
 memset(T->ch,0,MAXLEN);
 T->length=0;
 //連接字符串
 p=strcat(s1,s2);
 //字符串連接到T中
 strcpy(T->ch,p);
 T->length=(int)strlen(p);
 return 1;
}

/**
 * 截取子串
 */
int SubStringS(SString* T,SString src,int pos,int len){
 //清空T中的原始內容
 memset(T->ch,0,MAXLEN);
 T->length=0;
 //獲取子串
 /**
   char *strncpy(char *dest, const char *src, size_t n)
   dest -- 指向用于存儲復制內容的目標數組
   src -- 要復制的字符串
   n -- 要從源中復制的字符數
  */
 strncpy(T->ch,src.ch+pos,len);
 //重新設置串的長度
 T->length=len;
 return 1;
}


/**
 * 串比較
 */
int StrCompareS(SString T1,SString T2){
 /*
  int strcmp(const char *str1, const char *str2)
  如果返回值小于 0,則表示 str1 小于 str2
  如果返回值大于 0,則表示 str1 大于 str2
  如果返回值等于 0,則表示 str1 等于 str2
 */
 return strcmp(T1.ch,T2.ch);
}

/**
 * 串清空
 */
int ClearStringS(SString* T){
 memset(T->ch,0,MAXLEN);
 T->length=0;
 return 1;
}

2.3 函數測試

#include <stdio.h>
#include <stdlib.h>
#include "SString.h"


int main(int argc,char **argv){
 SString str1,str2;
 //str1.ch="Hello,World!";
 StrAssignS(&str1,"Hello,World");
 StrAssignS(&str2,"Hello");
 printf("len=%d\n",StrLengthS(str1));
 //字符串連接
 StrConcatS(&str1,"SHello","Hi");
 printf("len=%d\n",StrLengthS(str1));
 //打印字符串內容
 printf("str1=%s\n",str1.ch);
 printf("str2=%s\n",str2.ch);
 printf("CompareRes=%d\n",StrCompareS(str1,str2));
 //截取子串
 SubStringS(&str2,str1,2,3);
 puts(str1.ch);
 puts(str2.ch);
 //清空字符串內容
 ClearStringS(&str1);
 printf("str1's len=%d,str2's len=%d,\nso str1 isEmpty:%d,str2 isEmpty:%d\n",StrLengthS(str1),StrLengthS(str2),StrIsEmptyS(str1),StrIsEmptyS(str2));
 
 return 0;
}

貼上測試結果的截圖:

C語言如何實現串的順序存儲表示與基本操作

以上是“C語言如何實現串的順序存儲表示與基本操作”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

古田县| 宝应县| 陈巴尔虎旗| 耿马| 庆云县| 青河县| 磴口县| 金沙县| 府谷县| 宝坻区| 浮山县| 勃利县| 扶余县| 平邑县| 翁牛特旗| 邢台市| 天峻县| 册亨县| 屏南县| 皋兰县| 唐河县| 华池县| 日照市| 拉萨市| 霍邱县| 遵义县| 盈江县| 沙河市| 安图县| 吉安市| 钟祥市| 湘阴县| 尤溪县| 铜山县| 瑞金市| 金门县| 五大连池市| 确山县| 都匀市| 泗水县| 台中市|