最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

《數(shù)據(jù)結(jié)構(gòu)(C語言版)》串的定長(zhǎng)順序存儲(chǔ)

2022-04-03 10:39 作者:回到唐朝當(dāng)少爺  | 我要投稿

清華大學(xué)計(jì)算機(jī)系列教材? ?累計(jì)發(fā)行超400萬冊(cè)

嚴(yán)蔚敏 吳偉民 編著

數(shù)據(jù)結(jié)構(gòu)(C語言版)

以下是本人對(duì)該紫皮書第四章串中4.2.1節(jié)串的定長(zhǎng)順序存儲(chǔ)表示的代碼實(shí)現(xiàn),由于該存儲(chǔ)結(jié)構(gòu)非常簡(jiǎn)單,實(shí)用性也不高,與C語言中'\0'表示字符串的結(jié)束也不相同,而且只能靜態(tài)分配內(nèi)存,故沒有做成系統(tǒng)式地全部代碼,但是把課本上提到的關(guān)于這一節(jié)的全部?jī)蓚€(gè)函數(shù)均實(shí)現(xiàn)了,函數(shù)部分與課本完全相同

(貌似專欄把我縮進(jìn)吃了,懶得加了,另外建議用visual studio編譯)

代碼如下:

//串的定長(zhǎng)順序存儲(chǔ)表示

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define MAXSTRLEN 255//用戶可以在255以內(nèi)定義最大串長(zhǎng)

typedef int Status;

typedef unsigned char SString[MAXSTRLEN + 1];//0號(hào)單元存放串的長(zhǎng)度

/*注意這個(gè)數(shù)據(jù)結(jié)構(gòu)和C語言中字符串不同,后者是在字符串末尾設(shè)置'\0',這個(gè)是在0號(hào)位置存放串長(zhǎng)*/

Status Concat(SString& T, SString S1, SString S2);//連接兩個(gè)字符串

Status SubString(SString& Sub, SString S, int pos, int len);//用Sub返回串S的第pos個(gè)字符起長(zhǎng)度為len的字串

void ShowString(SString S);//打印字符串

int main()

{

SString MyStringA, MyStringB, ConnectStr;

unsigned char c;

int i = 1;

printf("請(qǐng)輸入字符串A:");

while ((c = getchar()) != '\n' && i < 256)

{

MyStringA[i] = c;

i++;

}

MyStringA[0] = i - 1;

fflush(stdin);//清空輸入緩沖區(qū),防止用戶輸入超過字符串所能存取的最大長(zhǎng)度

printf("請(qǐng)輸入字符串B:");

i = 1;

while ((c = getchar()) != '\n' && i < 256)

{

MyStringB[i] = c;

i++;

}

MyStringB[0] = i - 1;

fflush(stdin);//清空輸入緩沖區(qū),防止用戶輸入超過字符串所能存取的最大長(zhǎng)度

if (Concat(ConnectStr, MyStringA, MyStringB))

{

printf("字符串連接成功,未截?cái)郳n");

}

else

{

printf("字符串已連接,B字符串過長(zhǎng)已被截?cái)郳n");

}

ShowString(ConnectStr);

printf("尋找A的給定長(zhǎng)度的子串,請(qǐng)輸入子串的位置和長(zhǎng)度:");

int position, length;

scanf("%d%d", &position, &length);

SString sub;

if (SubString(sub, MyStringA, position, length))

{

ShowString(sub);

}

else

{

printf("子串位置錯(cuò)誤!\n");

}

return 0;

}

Status Concat(SString& T, SString S1, SString S2)//連接兩個(gè)字符串

{

Status uncut;//是否截?cái)?/p>

if (S1[0] + S2[0] < MAXSTRLEN)//未截?cái)?/p>

{

for (int i = 1; i <= S1[0]; i++)

{

T[i] = S1[i];

}

for (int i = S1[0] + 1; i <= S1[0] + S2[0]; i++)

{

T[i] = S2[i - S1[0]];

}

T[0] = S1[0] + S2[0];

uncut = TRUE;

}

else if (S1[0] < MAXSTRLEN)//截?cái)?/p>

{

for (int i = 1; i <= S1[0]; i++)

{

T[i] = S1[i];

}

for (int i = S1[0] + 1; i <= MAXSTRLEN; i++)

{

T[i] = S2[i - S1[0]];

}

T[0] = MAXSTRLEN;

uncut = FALSE;

}

else

{

for (int i = 0; i <= MAXSTRLEN; i++)

{

T[i] = S1[i];

}

uncut = FALSE;

}

return uncut;

}

Status SubString(SString& Sub, SString S, int pos, int len)//用Sub返回串S的第pos個(gè)字符起長(zhǎng)度為len的字串

{

if (pos<1 || pos>S[0] || len<0 || len>S[0] - pos + 1)

{

return ERROR;

}

for (int i = 1; i <= len; i++)

{

Sub[i] = S[pos + i - 1];

}

Sub[0] = len;

return OK;

}

void ShowString(SString S)//打印字符串

{

for (int i = 1; i <= S[0]; i++)

{

printf("%c", S[i]);

}

printf("\n");

}

《數(shù)據(jù)結(jié)構(gòu)(C語言版)》串的定長(zhǎng)順序存儲(chǔ)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
偏关县| 元阳县| 玉山县| 长春市| 象山县| 石门县| 长兴县| 台南县| 京山县| 景德镇市| 黄大仙区| 北辰区| 五莲县| 甘南县| 夏河县| 广水市| 茂名市| 兰州市| 高碑店市| 达拉特旗| 高雄县| 集安市| 乌兰县| 吉隆县| 金门县| 德州市| 大荔县| 贵溪市| 延寿县| 宁晋县| 元阳县| 久治县| 丰县| 洪洞县| 红桥区| 郧西县| 城口县| 罗甸县| 夏邑县| 乌拉特中旗| 仁布县|