实验3

来源:互联网 发布:文件解压软件 编辑:程序博客网 时间:2024/05/02 19:31

一、题目

编制一个求子串的程序。

二、需求分析      

本程序在Windows环境下用用Visual C++编写。

三、概要设计

定长顺序存储:

用一组地址连续的存储单元存储串值的字符序列,类似于线性表的顺序存储结构。 

可以用定长数组来描述: 

四、详细设计

#define MAXSTRLEN 255  

    // 用户可在255以内定义最大串长 

typedef unsigned char SString[Maxstrlen + 1];    

    // 0号单元存放串的长度 

 

五、测试结果

请输入主串:

asdfghjkl123456789

请输入主串中所求子串的位置和长度:

3

5

您所求子串是:

dfghj

、调试分析

    getchar()在<stdio.h>中定义为int型

    <stdio.h>中的getchar()字符(串)输入方式

经过反复的调试终于成功了!

七、 源程序(带注释)

#include <stdio.h>

#define MAXSTRLEN 255 

    // 用户可在255以内定义最大串长

typedef unsigned char SString[MAXSTRLEN + 1];

    // 0号单元存放串的长度

typedef int Status;

#define ERROR 0

#define OK 1

Status SubString(SString &Sub, SString S, int pos,int len)

{// 用Sub返回串S的第pos个字符起长度为len的子串。

    // 其中1≤pos ≤StrLength(S) 且 0≤len≤StrLength(S)-pos+1  

    if (pos<1 ||pos>S[0]|| len<0 || len>S[0]-pos+1)

       return ERROR;

    for(int i=1;i<=len;i++)

    Sub[i]=S[pos+i-1];

    Sub[0]=len;

       return OK;

} // SubString

void main()

{

   SString Sub,S;

   int pos,len;

   printf("请输入主串:/n");

   int i=1;

   while((S[i++]=getchar())!='/n');

   S[0]=i;

   printf("请输入主串中所求子串的位置和长度:/n");

   scanf("%d%d",&pos,&len);

   SubString(Sub,S,pos,len);

   printf("您所求子串是:/n");

   i=1;

   while(i<=Sub[0])

   printf("%c",Sub[i++]);

   putchar('/n');

}

0 0
原创粉丝点击