#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");
}
}
}