天天看點

第8周項目3-順序串算法

問題:

/*
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;
}
           

運作結果:

第8周項目3-順序串算法

(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;
}
           

運作結果:

第8周項目3-順序串算法

(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;
}
           

運作結果:

第8周項目3-順序串算法

(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;
}
           

運作結果:

第8周項目3-順序串算法

知識點總結:

串算法的應用。