4.1串的定义和基本操作&&4.1_2串的存储结构

4.1串的定义和基本操作

1780971631686

1780972284659

1780972519955

1780973284568

1780973404443

1780974035225

1780974051778

1780974004593

4.1_2串的存储结构

1780974130764

1780974277657

#include<stdio.h>
#define MAXLEN 255//
typedef struct{
	char ch[MAXLEN];//
	int length;//
}SString;


typedef struct{
	char ch*;
	int length;
}HString;

HString S;
S.ch = (char *)malloc(MAXLEN * sizeof(char));
S.length = 0;

1780995122365

1780995353538

typedef struct StringNode{
	char ch;
	struct StringNode * next; 
}StringNode,* String;

typedef struct StringNode{
	char ch[4];
	struct StringNode * next; 
}StringNode, * String;

1780995464913

#include<stdio.h>
#include<stdbool.h>
#define MAXLEN 255

typedef struct{
	char ch[MAXLEN];
	int length;
}SString;

bool SubString (SString &Sub, SString S,int pos,int len){
	if(pos+len-1 > S.length)
		return false;
	for(int i=pos;i<pos+len;i++)
		Sub.ch[i-pos+1] = S.ch[i];
	Sub.length = len;
	return true;
}
#include<stdio.h>
#include<stdbool.h>
#define MAXLEN 255

// 定长顺序存储串(教材常用:ch[0]闲置,有效字符从 ch[1] 开始)
typedef struct{
    char ch[MAXLEN];
    int length;
}SString;

// 取子串:C语言用指针代替引用
bool SubString(SString *Sub, SString S, int pos, int len)
{
    // 增加pos合法性判断 + 长度校验
    if(pos < 1 || len < 0 || pos + len - 1 > S.length)
        return false;

    for(int i = pos; i < pos + len; i++)
    {
        Sub->ch[i - pos + 1] = S.ch[i];
    }
    Sub->length = len;
    return true;
}

// 测试代码
int main(void)
{
    SString s, sub;
    // 赋值源串
    s.ch[1] = 'a';
    s.ch[2] = 'b';
    s.ch[3] = 'c';
    s.ch[4] = 'd';
    s.length = 4;

    if(SubString(&sub, s, 2, 2))
    {
        printf("子串:");
        for(int i = 1; i <= sub.length; i++)
            putchar(sub.ch[i]);
        printf("\n长度:%d\n", sub.length);
    }
    else
    {
        printf("取子串失败\n");
    }
    return 0;
}

1780997052110

int StrCompare(SString S,SString T){
	for(int i=1;i<S.length && i<=T.length;i++){
		if(S.ch[i]!=T.ch[i])
			return true;
	}
	return S.length-T.length;
}

1780997540341

int Index(SString S,SString T){
	int i = 1,n=StrLength(S),m=StrLength(T);
	SString sub;
	while(i<=n-m+1){
		SubString(sub,S,i,m);
		if(String(sub,T)!=0) ++i;
		else return i;
	}
	return 0;
}

1780998764251

posted @ 2026-06-09 17:56  轻狂书生han  阅读(5)  评论(0)    收藏  举报