學號: 姓名: 時間:
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 裝置...