資料結構C語言實現系列[5]——串

來源:互聯網
上載者:User

 

/******************************************************** 
 *                    串的簡單模式比對                  *
 ********************************************************/ 

#include <stdio.h>
#include <stdlib.h>

/* 定義單鏈表結構體 */
struct node
{
    char ch;
    struct node *next;
};

/* 初始化單鏈表 */
void init(struct node **h)
{
    *h = (struct node*)malloc(sizeof(struct node));
    (*h)->next = NULL;
    return;
}

/* 將x結點插入到鏈表後 */
void append(struct node *p, int x)
{
    struct node *s;

    s = (struct node*)malloc(sizeof(struct node));
    s->ch = x;
    s->next = NULL;
    /* 移動到表尾 */
    while (p->next != NULL)
    {
        p = p->next;
    }
    
    p->next = s;
    
    return;
}

void display(struct node *p)
{
    printf("You typed string is: ");
    while (p->next != NULL)
    {
        printf("%c", p->next->ch);
        p = p->next;
    }
    printf(" ");

    return;
}

int main(int argc, char *argv[])
{
    struct node *t, *s;    /* s為主串, t為模式串 */
    struct node *sNext, *p, *q;
    int i, x = 0;
    
    init(&s);
    printf("Please type main string:  ");
    while (x != ' ')
    {
        x = getchar();
        if (x != ' ')
        {
            append(s, x);        /* 添加到表尾 */
        }
    }
    display(s);
    
    init(&t);
    printf("Please type substring: ");
    x = 0;
    while (x != ' ')
    {
        x = getchar();
        if (x != ' ')
        {
            append(t, x);        /* 添加到表尾 */
        }
    }
    display(t);
    
    /* 初始化 */
    sNext = s->next;
    p = sNext;
    q = t->next;
    i = 1;        
    /* 從開始字元進行比較 */
    while ((p->next != NULL) && (q->next != NULL))
    {
        /* 進行匹配檢驗 */
        if (p->ch == q->ch)
        {
            p = p->next;
            q = q->next;
        }
        else    
        {
            sNext = sNext->next;
            p = sNext;        /* 指向主串中的下一個 */
            q = t->next;    /* 指標後退重新開始匹配 */
            i++;        /* 記錄位置 */
        }
    }
    /* 輸出結果 */
    if ((q->next) == NULL && (t->next->ch == s->next->ch))
    {
        printf("match position: %d", i);
    }
    else
    {
        printf("Not match!");
    }
    printf(" ");
    
    return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.