最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)現(xiàn)串的順序存儲(chǔ)表示與基本操作

 更新時(shí)間:2021年09月22日 16:35:44   作者:似曾不相識(shí)  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)串的順序存儲(chǔ)表示與基本操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)串的順序存儲(chǔ)表示與基本操作代碼,供大家參考,具體內(nèi)容如下

1、串的三種存儲(chǔ)表示

串,即:字符串。要注意的是,C語(yǔ)言中是沒有字符串?dāng)?shù)據(jù)類型的,而將其作為一種數(shù)據(jù)結(jié)構(gòu)——“內(nèi)容受限的線性表”進(jìn)行實(shí)現(xiàn),并對(duì)空串、空格串、串的長(zhǎng)度、子串與主串等概念進(jìn)行了約定【詳見 《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)》 ,嚴(yán)蔚敏、吳偉民編著。

串的存儲(chǔ)表示主要分為三種:

【1】順序存儲(chǔ)表示 :使用字符型數(shù)組(一塊連續(xù)的內(nèi)存存儲(chǔ)空間)來(lái)存儲(chǔ)串的內(nèi)容,其最大長(zhǎng)度已經(jīng)定義則不可修改;(這也是C語(yǔ)言中初始約定好的一種較為字符串內(nèi)容的表示方式)

【2】堆分配存儲(chǔ)表示:使用malloc和free函數(shù)對(duì)堆區(qū)進(jìn)行操作,進(jìn)行堆區(qū)內(nèi)存的動(dòng)態(tài)分配與釋放,而這塊存儲(chǔ)空間就用于存儲(chǔ)串的內(nèi)容;

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

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

2、串的順序存儲(chǔ)表示與基本操作

這部分就直接貼代碼了

【因?yàn)檫@里是對(duì)數(shù)組元素的操作,就偷個(gè)懶,直接用了C語(yǔ)言string.h頭文件中提供的一些庫(kù)函數(shù),對(duì)一些基本操作進(jìn)行了簡(jiǎn)單實(shí)現(xiàn)。需要詳細(xì)寫代碼的部分到串的堆分配實(shí)現(xiàn)時(shí)候再體現(xiàn)】

2.1 頭文件聲明

/**
 * 串的順序存儲(chǔ)實(shí)現(xiàn)
 */
#include <string.h>
#define  MAXLEN 255
//結(jié)構(gòu)體定義-表示串結(jié)構(gòu)體
typedef struct{
 char ch[MAXLEN+1];//存儲(chǔ)串內(nèi)容的字符型數(shù)組[+1是為了存儲(chǔ)結(jié)束標(biāo)志'\0']
 int length;//當(dāng)前串的長(zhǎng)度
}SString;

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

/**
 * 獲取字符串長(zhǎng)度
 */
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 函數(shù)實(shí)現(xiàn)

#include "SString.h"

/**
 * 將字符串T復(fù)制為chars
 */
int StrAssignS(SString* T,char* chars){
 //清空原始內(nèi)容
 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;
}


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

/**
 * 串連接操作
 */
int StrConcatS(SString* T,char* s1,char* s2){
 //輔助變量
 char *p;
 //清空T中的內(nèi)容
 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中的原始內(nèi)容
 memset(T->ch,0,MAXLEN);
 T->length=0;
 //獲取子串
 /**
   char *strncpy(char *dest, const char *src, size_t n)
   dest -- 指向用于存儲(chǔ)復(fù)制內(nèi)容的目標(biāo)數(shù)組
   src -- 要復(fù)制的字符串
   n -- 要從源中復(fù)制的字符數(shù)
  */
 strncpy(T->ch,src.ch+pos,len);
 //重新設(shè)置串的長(zhǎng)度
 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 函數(shù)測(cè)試

#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));
 //打印字符串內(nèi)容
 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);
 //清空字符串內(nèi)容
 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è)試結(jié)果的截圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言中pthread_create函數(shù)實(shí)現(xiàn)向線程函數(shù)傳遞參數(shù)

    C語(yǔ)言中pthread_create函數(shù)實(shí)現(xiàn)向線程函數(shù)傳遞參數(shù)

    本文主要介紹了C語(yǔ)言中pthread_create函數(shù)實(shí)現(xiàn)向線程函數(shù)傳遞參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • C++實(shí)現(xiàn)顯示MP3文件信息的方法

    C++實(shí)現(xiàn)顯示MP3文件信息的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)顯示MP3文件信息的方法,可實(shí)現(xiàn)顯示如作者、專輯等(libZPlay)信息的功能,需要的朋友可以參考下
    2015-06-06
  • C++詳解如何實(shí)現(xiàn)兩個(gè)線程交替打印

    C++詳解如何實(shí)現(xiàn)兩個(gè)線程交替打印

    這篇文章主要介紹了使用C++庫(kù)實(shí)現(xiàn)兩個(gè)線程交替打印,一個(gè)線程打印奇數(shù)、一個(gè)線程打印偶數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 淺析C++中的函數(shù)重載

    淺析C++中的函數(shù)重載

    這篇文章主要介紹了淺析C++中的函數(shù)重載,在C++中,可以為兩個(gè)或兩個(gè)以上的函數(shù)提供相同的函數(shù)名稱,只要參數(shù)類型不同,或者參數(shù)類型相同而參數(shù)個(gè)數(shù)不同,又或者參數(shù)類型參數(shù)個(gè)數(shù)相同,參數(shù)次序不同,稱為函數(shù)重載,需要的朋友可以參考下
    2023-08-08
  • C++實(shí)現(xiàn)LeetCode(155.最小棧)

    C++實(shí)現(xiàn)LeetCode(155.最小棧)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(155.最小棧),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 深入剖析Android中init進(jìn)程實(shí)現(xiàn)的C語(yǔ)言源碼

    深入剖析Android中init進(jìn)程實(shí)現(xiàn)的C語(yǔ)言源碼

    這篇文章主要介紹了Android中init進(jìn)程實(shí)現(xiàn)的C語(yǔ)言源碼,init屬性服務(wù)在安卓中屬于系統(tǒng)的底層Linux服務(wù),需要的朋友可以參考下
    2015-07-07
  • C 字符串?dāng)?shù)組排序的小例子

    C 字符串?dāng)?shù)組排序的小例子

    C 字符串?dāng)?shù)組排序的小例子,需要的朋友可以參考一下
    2013-03-03
  • 二叉搜索樹源碼分享

    二叉搜索樹源碼分享

    這篇文章主要介紹了二叉搜索樹源碼,需要的朋友可以參考下
    2014-04-04
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 詳解C++?左值引用與?const?關(guān)鍵字

    詳解C++?左值引用與?const?關(guān)鍵字

    這篇文章主要介紹了C++?左值引用與?const?關(guān)鍵字,左值引用是已定義的變量的別名,其主要用途是用作函數(shù)的形參,將?const?關(guān)鍵字用于左值引用時(shí),其在初始化時(shí)可接受的賦值形式變得更加廣泛了,這里來(lái)總結(jié)一下,需要的朋友可以參考下
    2022-09-09

最新評(píng)論

托克逊县| 广南县| 科技| 葵青区| 镇巴县| 麻城市| 页游| 正阳县| 多伦县| 汝城县| 佳木斯市| 大埔区| 内丘县| 东兴市| 南皮县| 勐海县| 志丹县| 长武县| 卓尼县| 波密县| 承德县| 裕民县| 台中市| 林芝县| 凤山县| 宁津县| 侯马市| 社会| 民勤县| 博野县| 封开县| 祁阳县| 静安区| 洛隆县| 龙游县| 仪征市| 鹿泉市| 荣昌县| 浦城县| 丰台区| 宿松县|