【数据结构】串的基本操作

#include<stdafx.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define OK 1

#define ERROR 0

#define OVERFLOW -2

//定义String为结构类型

typedef struct{

      char*s;

      intsize;

   }String;

 

//字符串初始化并输出

int InitString(String &S,char*str)

{

    intlen = strlen(str);

    S.s= (char*)malloc(len*sizeof(char));

    strcpy(S.s,str);

    S.size = len;

    printf("您要操作的字符串为:\n");

    puts(S.s);

    printf("字符串长度为:\n%d\n",S.size);

    returnOK;

 }

 

//输出子串

int SubString(String &S,intpos,int len)

{

  String T;

  char *p,*q;

  q=T.s = (char*)malloc(len*sizeof(char));

  T.size=len;

  for(p=S.s+pos-1;p<S.s+pos+len;p++)

  {*q=*p;q++;}

  for(p=T.s;p<T.s+len;p++)

     printf("%c",*p);

  returnOK;

}

 

//模式匹配

int Index(String &S,char*str1)

{

    String T;

    inti=1,j=1;

    char*p,*q=S.s,*w=S.s;

    intlen = strlen(str1);

    p=T.s= (char*)malloc(len*sizeof(char));

    strcpy(T.s,str1);

    T.size = len;

    while(j<=T.size&&S.size-i>=len-1)

    {if(*q==*p){p++;q++;j++;

    if(j==len+1)printf("匹配成功!\n匹配的起始位置为%d",i);}

    else{w++;q=w;p=T.s;j=1;i++;}

    if(S.size-i<len-1)printf("匹配失败!\n");

    }

    returnOK;

}

 

//查找字符位置

int Seek(String &S,char c)

{

    char*p;

    inti=1,j=1;

    for(p=S.s;p<S.s+S.size;p++)

    {if(*p==c){printf("这是第%d个字符\n",i);j++;}i++;}

    if(j==1)

       printf("没有这个字符\n");

    returnOK;

}

 

 

 

//主函数

void main()

{

    String S;

    chara[100];

    printf("请输入一个字符串:\n");

    gets(a);

    InitString(S,a);

    intflag=1,select;

    printf("====================菜单===========================\n");

    printf("=               1.输出子串                      =\n");

    printf("=               2.模式匹配                      =\n");

    printf("=               3.查找字符位置                  =\n");

    printf("=               4.结束操作                      =\n");

    printf("================支持乱序选择=======================\n");

    while(flag){

       printf("\n请选择菜单中的操作选项:\n");

       scanf("%d",&select);

       switch(select)

       {

       case1:

           intpos,len;

           printf("请输入子串的起始位置\n");

           scanf("%d",&pos);

           printf("请输入子串的长度\n");

           scanf("%d",&len);

           SubString(S,pos,len);break;

       case2:

           getchar();

           charc[20];

           printf("请输入一个子串:\n");

           gets(c);

           Index(S,c);break;

       case3:

           getchar();

           charc1;

           printf("请输入要查找的字符\n");

           scanf("%c",&c1);

           Seek(S,c1);break;

       case4:flag=0;break;

        default:printf("您输入的数据有误!\n");

       }

    }

   

}

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值