數據結構實訓報告


預習要點:

① 串賦值Assign(s,t):將一個值賦給串s。
② 銷毀串DestroyStr(s):釋放串s占用的內存空間。
③ 串復制StrCopy(s,t):將一個串t賦給串s。
④ 求串長StrLength(s):返回串s的長度。
⑤ 判斷串相等StrEqual(s,t):兩個串s和t相等時返回1;否則返回0。
⑥ 串連接Concat(s,t):返回串s和串t連接的結果。
⑦ 求子串SubStr (s,i,j):返回串s的第i個位置開始的j個字符組成的串。
⑧ 查找定位位置Index(s,t):返回子串t在主串s中的位置。
⑨ 子串插入InsStr(s,i,t):將子串t插入到串s的第i個位置。
⑩ 子串刪除DelStr(s,i,j):刪除串s中從第i個位置開始的j個字符。
⑪ 子串替換RepStrAll(s,s1,s2):將串s中所有出現的子串s1均替換成s2。
⑫ 輸出串DispStr(s):顯示串s的所有字符。
實驗(訓)儀器、軟件、設備和器材:
① 計算機DELL
② Dev-C++
實驗(訓)內容 :
①定義順序串A,結構體內包含兩個成員,存儲數據的數組和字符串的長度。
②給這個順序串賦值。
③再定義令外一個順序串B,將A串的內容復制到B串。
④ 求A串與B串的長度。
⑤ 判斷A串與B串是否相等,
如果A串>B串,返回1;
如果A串<B串,返回1;
如果A串=B串,返回0.
⑥ 將B串接在A串后面,返回C串。。
⑦ 求A串中的子串SubStr (A,i,j):返回串A的第i個位置開始的j個字符組成的串。
⑧ 模式匹配------查找定位位置Index(A,t):
返回子串t在主串A中的位置。
⑨ 輸出串DispStr(A):顯示串A的所有字符。
//
//  main.cpp
//  字符串上機
//
//  Created by 孫賢超 on 2019/5/18.
//  Copyright © 2019 孫賢超. All rights reserved.
//
#include<stdio.h>
#define maxsize 100
typedef struct{
    char ch[maxsize];
    int n;
}SeqString;

void Assign(SeqString &L,char ch1[]);
void DisqStr(SeqString &L);
int  concat(SeqString &L,char ch2[]);
void Strlength(SeqString &L);
void StrEqual(SeqString &L,char ch2[],int i);
void Index (SeqString &L,char ch3[]);
void InsStr(SeqString &L,int n,int m);

int main(){
    int i,m,n;
    char ch1[100],ch2[5]="efgh",ch3[4]="efg";
    SeqString L;
    printf("請輸入一個字符串:\n");
    gets(ch1);
    Assign(L,ch1);
    DisqStr(L);
    Strlength(L);
    StrEqual(L,ch2,i);
    i=concat(L,ch2);
    printf("請問要查找第幾個位置開始的幾個字符:\n");
    scanf("%d %d",&n,&m);
    InsStr(L,n,m);
    Index(L,ch3);
    DisqStr(L);
}

void Assign(SeqString &L,char ch1[]){           //  數組賦值給字符串
    int i=0;
    while(ch1[i]!='\0'){
        L.ch[i]=ch1[i];
        i++;
    }
    L.n=i;
}

void DisqStr(SeqString &L){                     //  輸出串
    printf("L.ch的字符串為:");
    for(int i=0;i<L.n;i++){
        printf("%c",L.ch[i]);
    }
    printf("\n");
}

int  concat(SeqString &L,char ch2[]){            //串連接
    int i=0,j,m;
    m=L.n;
    while(ch2[i]!='\0'){
        i++;
        m++;
    }
    for(j=0;j<i;j++){
        L.ch[j+L.n]=ch2[j];
    }
    printf("將串ch2連接到L.ch后面,得到的新的字符串為:\n%s\n",L.ch);
    L.n=m;
    return i;
}

void Strlength(SeqString &L){                    //求串長
    printf("字符串L.ch的長度為:%d\n",L.n);
}

void StrEqual(SeqString &L,char ch2[],int i){          //判斷串相等
    int k=0,a;
    a=L.n>=i?L.n:i;
    printf("判斷L.ch和ch2的字符串是否相等!\n結果為:");
    for(int j=0;j<a;j++){
        if(L.ch[j]==ch2[j]){
            k++;
        }else if(L.ch[j]>ch2[j]){
            printf("1\n");
            break;
        }else {
            printf("-1\n");
            break;
        }
    }
    if(k==a){
        printf("0\n");
    }
}

void Index (SeqString &L,char ch3[]){
    int n=0,i,j,k;
    while(ch3[n]!='\0'){
        n++ ;
    }
    for(i=0;i<L.n-n;i++){
        for(j=0,k=i;j<n;j++,k++){
            if(ch3[j]!=L.ch[k]){
                break;
            } }
        if(j==n){
            printf("ch3字符串是從L.ch字符串中的第%d位置到第%d的位置\n",i+1,i+n);
        }
    }
    return;
}

void InsStr(SeqString &L,int n,int m){           //串的查找
    int i;
    printf("L.ch字符串第%d個位置開始的%d個字符為:\n",n,m);
    for(i=n-1;i<n+m-1;i++){
        printf("%c",L.ch[i]);
    }
    printf("\n");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM