實驗總結報告 串和陣列

2021-10-12 20:32:51 字數 4016 閱讀 7129

學號: 姓名: 時間:

1、目的

1.做實驗的目的

2.2.撰寫實驗報告的目的

2、內容

1.說明實驗次數及實驗內容

本次實驗用乙個實驗課時完成。

實驗內容:

1. 編寫函式strassign(), strcopy() , strlenth() , strcompare() , strconcat() ,

substring(), replace(),完成串賦值,串複製,求串長度,串比較,串連線,求字

串,子串替代等相應功能。

注:replace() 依賴find_kmp()

2. 使用kmp 演算法,編寫函式find_kmp(char *s,char *p,int start)實現字串匹配。

測試資料:

2.1char s = 「abcabcabcd」;

char p = 「abcabcd」;

2.2char s = 「abcdababcabcdabcabcabcd」;

char p = 「abcabcd」;

2.3char s = 「cocaocoaoc」;

char p = 「coaoc」;

要求: 1.列印出模式串p 的next模式陣列;

2.完成find_kmp()後在repalce()中呼叫,將p 替換成「aaa」。

注意2.2 有2 個地方要替換。

3. 建立三元組實現以下稀疏矩陣的儲存,並利用三元組實現稀疏矩陣的轉置,比

較「按需查詢」方法與「按位就座」方法的區別。

0 12 9 0 0 0 0

0 0 0 0 0 0 0

3 0 0 0 0 14 0

0 0 24 0 0 0 0

0 18 0 0 0 0 0

15 0 0 7 0 0 0

建議實現流程為1.矩陣2.三元組3.轉置的三元組4.轉置的矩陣,將3 或4

列印出來。

2.做實驗完成情況

實驗內容在實驗課時時間內完成(提前編寫了大概1/2部分的**),選做內容也完成。

本次實驗內容較多,為使**看著簡潔有條理,採用了建工程的方式。

串部分:

自定義了標頭檔案 string.h:

/*自定義標頭檔案*/

#include

#define max_len 255

typedef unsigned char sstring[max_len + 1];

/*自定義函式*/

void strassign(sstring &t, char s);//將字串常量s賦給t

void strprint(sstring t);//列印串

void strcopy(sstring &t, sstring s);//串複製

void test();//檢驗串操作

int strlength(sstring t);//求串長

int strcompare(sstring t, sstring s);//比較串,t>s返回正值,tvoid strconcat(sstring &t, sstring s1, sstring s2);//用t返回sstring型別串s1、s2連線成的新串

void substring(sstring &s, sstring t, int pos, int len);//用s返回串t中起始位置為pos,長度為len的字串

void index(sstring s, sstring t, int pos);//若s串中存在不重疊的子串t,則用pos返回所有t串的起始位置

void strreplace(sstring &s, sstring t, sstring v);//若串s中存在字串t,則用v替代所有不重疊的t

void strinsert(sstring &s, int pos, sstring t);//在串s中pos位置插入子串t

void strdelete(sstring &s, int pos, int len);//在串s中pos位置刪除長度為len的子串

void getnext(sstring s, int next);//求模式串中的next函式修正值並寫入陣列next

int findkmp(sstring s, sstring t, int start);//在串s中從start位置開始,查詢第一次出現模式t的位置返回,沒找到返回-1

void strreplace2(sstring &s, sstring t, sstring v);//若串s中存在字串t,則用v替代所有不重疊的t

void kmp();//kmp演算法及其應用

在標頭檔案中對所有要用到的自定義函式進行了宣告,各函式的功能可見**注釋部分。

串賦值:

#include"string.h"

void strassign(sstring &t, char s)

int i = 0;

while (s[i]!='\0')

t[i] = '\0';

}該操作將字串常量s中的元素賦值給sstring型別t;

串複製:

#include"string.h"

void strcopy(sstring &t, sstring s)

int i = 0;

while (s[i] != '\0')

t[i] = '\0';

}該操作完成將sstring型別t賦給sstring型別s;

求串長度:

#include"string.h"

int strlength(sstring t)

該操作返回sstring型別中元素的個數即串的長度;

串比較:

#include"string.h"

int strcompare(sstring t, sstring s)

串連線:

#include"string.h"

void strconcat(sstring &t, sstring s1, sstring s2)//s1、s2均為空

if (!s1&&s2)//s1為空

if (!s2&&s1)//s2為空

for (i = 0; i <= strlength(s1); i++)

t[i] = s1[i];

for (i = 0; i <= strlength(s2); i++)

t[i + strlength(s1)] = s2[i];

t[strlength(s1) + strlength(s2) + 1] = '\0';

}此操作完成將串s1和s2連線之後賦給t;

求子串:

#include"string.h"

void substring(sstring &s, sstring t, int pos, int len)

for (i = 0; i < len; i++)

s[i] = t[i + pos];

s[i] = '\0';

}該操作求出t串的乙個子串s;

子串代替:

參考bf演算法:

#include"string.h"

void strreplace(sstring &s, sstring t, sstring v)

}此方法要用到index()函式,此函式參考bf演算法完成:

#include"string.h"

void index(sstring s, sstring t, int pos)

else

}if (count == 0)

printf("s中沒有t串\n");

}參考kmp演算法:

#include"string.h"

void strreplace2(sstring &s, sstring t, sstring v){

int start,tlen;

tlen = strlength(t);

while (findkmp(s,t,0) != -1){

start = findkmp(s, t, 0);

strdelete(s, start, tlen);

strinsert(s, start, v);

資料結構第45章串和陣列自測卷答案

第4 5章串和陣列自測卷答案姓名班級 一 填空題 每空1分,共20分 1.不包含任何字元 長度為0 的串稱為空串 由乙個或多個空格 僅由空格符 組成的串稱為空白串。2.設s a document mary.doc 則strlen s 20的字元定位的位置為 3 4.子串的定位運算稱為串的模式匹配 被...

陣列實驗報告

一 實驗目的 1 正確理解陣列的概念,熟練掌握一維陣列和二維陣列的定義和初始化方法。2 熟練掌握字元陣列和字串的區別和使用 字串函式的使用。3 熟練掌握一維陣列 二維陣列以及字串的輸入和輸出方法。4 了解陣列的位址 陣列元素的位址及一維陣列和二維陣列的儲存結構。5 掌握字元竄的結束標誌,正確使用字串...

玻璃實驗總結報告

玻璃綜合性設計實驗 實驗總結報告 湖藍色玻璃材料的製備及效能測定 班級 無非0901 姓名 班碩 林世澤 姜雪濤 侯喜財 陳洪輝 指導老師 馬晶 日期 2012年12月14日 瀋陽化工大學材料科學與工程學院 一 實驗原料 儀器 裝置 原料 碳酸鈉 na2co3 硼酸 h3bo3 氧化銅 cuo 裝置...