問題:
/*
Copyright (c)2015,煙台大學計算機與控制工程學院
All rights reserved.
檔案名稱:項目4.cbp
作 者:王聰
完成日期:2015年10月22日
版 本 号:v1.0
問題描述:采用順序存儲方式存儲串,實作下列算法并測試。
輸入描述:無
程式輸出:測試資料
*/
頭檔案及功能函數詳見 【順序串算法庫】
(1)試編寫算法實作将字元串S中所有值為c1的字元換成值為c2的字元: void Trans(SqString *&s, char c1, char c2);
代碼:
#include "sqstring.h"
void Trans(SqString &s, char c1, char c2)
{
int i;
for (i=0; i<s.length; i++)
if (s.data[i]==c1)
s.data[i]=c2;
}
int main()
{
SqString s;
StrAssign(s, "messages");
Trans(s, 'e', 'a');
DispStr(s);
return 0;
}
運作結果:

(2)試編寫算法,實作将已知字元串所有字元倒過來重新排列。如ABCDEF改為FEDCBA。
void Invert(SqString &s)
代碼:
#include "sqstring.h"
void Invert(SqString &s)
{
int i;
char temp;
for (i=0; i<s.length/2; i++)
{
temp = s.data[i];
s.data[i]=s.data[s.length-i-1];
s.data[s.length-i-1] = temp;
}
}
int main()
{
SqString s;
StrAssign(s, "abcdefg");
Invert(s);
DispStr(s);
return 0;
}
運作結果:
(3)從串s中删除其值等于c的所有字元。如從message中删除’e’,得到的是mssag。
void DellChar(SqString &s, char c)
代碼:
#include "sqstring.h"
void DellChar(SqString &s, char c)
{
int k=0, i=0; //k記錄值等于c的字元個數
while(i<s.length)
{
if(s.data[i]==c)
k++;
else
s.data[i-k]=s.data[i];
i++;
}
s.length -= k;
}
int main()
{
SqString s;
StrAssign(s, "message");
DellChar(s, 'e');
DispStr(s);
return 0;
}
運作結果:
(4)有兩個串s1和s2,設計一個算法求一個這樣的串,該串中的字元是s1和s2中公共字元。所謂公共子串,是由在s1中有,且在s2中也有的字元構成的字元。例s1為”message”,s2為”agent”,得到的公共子串是”eage”。
SqString CommChar(SqString s1,SqString s2);
代碼:
#include "sqstring.h"
SqString CommChar(SqString s1,SqString s2)
{
SqString s3;
int i,j,k=0;
for (i=0; i<s1.length; i++)
{
for (j=0; j<s2.length; j++)
if (s2.data[j]==s1.data[i])
break;
if (j<s2.length) //s1.data[i]是公共字元
{
s3.data[k]=s1.data[i];
k++;
}
}
s3.length=k;
return s3;
}
int main()
{
SqString s1, s2, s;
StrAssign(s1, "message");
StrAssign(s2, "agent");
s = CommChar(s1, s2);
DispStr(s);
return 0;
}
運作結果:
知識點總結:
串算法的應用。