/*
* 顺序
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define MAXSIZE 255
typedef int statue;
typedef char Elemtype;
typedef struct {
char *pBase;
int chunsize;
}HString;
//函数的前置声明
statue Strini(HString &str);//初始化
statue StrAssign(HString &str,char *val);
void Strshow(HString str);
bool isEmpty(HString str);
statue Strcopy(HString &str1,HString str2);
int Strlength(HString str);
statue Concat(HString &str1,HString str2);//str2 链接到str1后面
statue SubString(HString &sub,HString s,int pos,int length);
int StrCompare(HString str1,HString str2);//比较两个字符串大小 1 0 -1
int Index(HString str1,HString str2);//str2 第一次在 str1 中的位置
int main(void){
HString str,str2;
Strini(str);
Strini(str2);
char val[255];
gets(val);
StrAssign(str,val);
gets(val);
StrAssign(str2,val);
//printf("%d\n",StrCompare(str,str2));
//Concat(str,str2);
//SubString(str2,str,4,5);
//Strshow(str2);
printf("%d\n",Index(str,str2));
return 0;
}
statue Strini(HString &str){
str.pBase=(Elemtype *)malloc(sizeof(Elemtype)*MAXSIZE);
if(str.pBase==NULL){
printf("內存分配失敗\n");
exit(OVERFLOW);
}
str.chunsize=0;
return OK;
}
statue StrAssign(HString &str,char *val){
int i,length;
length=strlen(val);
if(length>MAXSIZE){
printf("子串过大\n");
return ERROR;
}
for(i=0;i<length;i++){
str.pBase[i]=val[i];
}
str.chunsize=length;
return OK;
}
void Strshow(HString str){
int i;
if(isEmpty(str)){
printf("This chuan is empty\n");
exit(-1);
}
for(i=0;i<str.chunsize;i++){
printf("%c",str.pBase[i]);
}
printf("\n");
}
bool isEmpty(HString str){
if(str.chunsize==0)
return true;
return false;
}
statue Strcopy(HString &str1,HString str2){
int i;
if(isEmpty(str2)){
printf("This chuan is empty\n");
return ERROR;
}
for(i=0;i<str2.chunsize;i++){
str1.pBase[i]=str2.pBase[i];
}
str1.chunsize=str2.chunsize;
return OK;
}
int Strlength(HString str){
if(isEmpty(str))
return 0;
return str.chunsize;
}
statue Concat(HString &str1,HString str2){
int i,length;
length=Strlength(str1)+Strlength(str2);
if(isEmpty(str1)||isEmpty(str2)){
printf("this chuan is empty\n");
return ERROR;
}
while(length>MAXSIZE){
str1.pBase=(Elemtype *)realloc(str1.pBase,sizeof(Elemtype)*length);
}
for(i=Strlength(str1);i<length;i++){
str1.pBase[i]=str2.pBase[i-Strlength(str1)];
}
str1.chunsize+=str2.chunsize;
return OK;
}
int StrCompare(HString str1,HString str2){
int i,j,k;
str1.chunsize>str2.chunsize ? k=str1.chunsize:k=str2.chunsize;
if(isEmpty(str1)||isEmpty(str2)){
printf("this chuan is empty\n");
exit(-1);
}
for(i=0;i<k;i++){
if(str1.pBase[i]>str2.pBase[i]){
return 1;
}else if(str1.pBase[i]<str2.pBase[i]){
return -1;
}
if(i+1==k){
return 0;
}
}
}
statue SubString(HString &sub,HString s,int pos,int length){
int i;
if(pos<0||pos>s.chunsize){
printf("This pos ERROR\n");
return ERROR;
}
if(s.chunsize-pos<length){
printf("This length ERROR\n");
return ERROR;
}
if(isEmpty(s)){
printf("This chuan is empty\n");
return ERROR;
}
for(i=0;i<length;i++){
sub.pBase[i]=s.pBase[i+pos-1];
}
sub.chunsize=length;
return OK;
}
int Index(HString str1,HString str2){
int i=0,j=0,k;
if(isEmpty(str1)||isEmpty(str2)){
printf("this chuan is empty\n");
exit(-1);
}
while(i<str1.chunsize&&j<str2.chunsize){
//printf("%c*********%c\n",str1.pBase[i],str2.pBase[j]);
// printf("%d----%d\n",i,j);
if(str1.pBase[i]==str2.pBase[j]){
i++;
j++;
}else{
j=0;
i=i-j+1;
}
}
//printf("%d-->>>--%d\n",i,j);
if(j>=str2.chunsize){
return i-str2.chunsize+1;
}else if(i>str1.chunsize){
return 0;
}
}
c 数据结构 顺序串
最新推荐文章于 2022-01-24 19:12:01 发布