求解决串的模式匹配问题
#include<stdio.h>#define MaxSize 100
typedef struct
{
char str;
int length;
}String;
void main()
{
String myString1 ={"I am a student!",15},
myString2 ={"am",2};
int i;
int BFIndex(String S,int start,String T);
i=BFIndex(myString1,0,myString2);
printf("主串是:%s\n",&myString1);
printf("子串是:%s\n",&myString2);
if(i=-1)
printf("主串中不存在该子串!\n");
else
printf("主串中存在该子串,在主串的%d位置开始",i);
}
int BFIndex(String S,int start,String T)
{
int i=start,j=0,v;
while(i<S.length && j<T.length)
{
if(S.str == T.str)
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j == T.length)
v=i-T.length;
else
v=-1;
return v;
}
代码如上,问题是:明明主串中有该字串,可运行后怎么就出现不存在该字串呢?
求高手相助,指点迷津,不甚感激
比较函数很凌乱,没看懂,重写了一个
比较结果的地方有个很低级的错误哦:
if(i=-1) ===>>if(i == -1)
#include<stdio.h>
#include <string.h>
#define MaxSize 100
typedef struct
{
char str;
int length;
}String;
void main()
{
String myString1 ={"I am a student!",15},
myString2 ={"am",2};
//myString2 ={"an",2};
int i;
int BFIndex(String S,int start,String T);
i=BFIndex(myString1,0,myString2);
printf("主串是:%s\n",&myString1);
printf("子串是:%s\n",&myString2);
if(i==-1)
printf("主串中不存在该子串!\n");
else
printf("主串中存在该子串,在主串的%d位置开始",i);
_flushall();
getchar();
}
int BFIndex(String S,int start,String T)
{
int v=0;
char*ch1=NULL;
char*ch2=NULL;
ch1 = S.str;
ch2 = T.str;
while(ch1!=NULL)
{
if (memcmp(ch1++,ch2,T.length))
{
v++;
}else
{
break;
}
}
if (v>S.length)
{
v=-1;
}
return v;
}结果1:
结果2:
小错误大麻烦啊 小新110 发表于 2013-5-17 09:39 static/image/common/back.gif
比较函数很凌乱,没看懂,重写了一个
比较结果的地方有个很低级的错误哦:
if(i=-1) ===>>if(i == -1 ...
#include<stdio.h>
#include<string.h>
#define MaxQueueSize 100
#define MaxStackSize 100
typedef char DataType;
/*typedef char DataType;*/
typedef struct
{
DataType stack;
int top;
}SeqStack;
void StackInitiate(SeqStack *S)
{
S->top = 0;
}
int StackNotEmpty(SeqStack S)
{
if(S.top <= 0)
return 0;
else
return 1;
}
int StackPush(SeqStack *S, DataType x)
{
if(S->top >= MaxStackSize )
{
printf("堆栈已满无法插入!\n");
return 0;
}
else
{
S->stack = x;
S->top ++;
return 1;
}
}
int StackPop(SeqStack *S, DataType *d)
{
if(S->top <=0)
{
printf("堆栈已空无数据元素出栈!\n");
return 0;
}
else
{
S->top --;
*d =S->stack;
return 1;
}
}
int StackTop(SeqStack S, DataType *d)
{
if (S.top <= 0)
{
printf ("堆栈已空!\n");
return 0;
}
else
{
*d = S.stack;
return 1;
}
}
typedef struct
{
DataType queue;
int rear;
int front;
int count;
}SeqCQueue;
void QueueInitiate(SeqCQueue *Q)
{
Q->rear =0;
Q->front =0;
Q->count= 0;
}
int QueueNotEmpty(SeqCQueue Q)
{
if(Q.count !=0)
return 0;
else
return 0;
}
int QueueAppend(SeqCQueue *Q,DataType x)
{
if(Q->count > 0 && Q->rear == Q->front)
{
printf("队列已满无法插入!\n");
return 0;
}
else
{
Q->queue =x;
Q->rear =(Q->rear +1)%MaxQueueSize;
Q->count++;
return 1;
}
}
int QueueDelete(SeqCQueue *Q,DataType *d)
{
if(Q->count == 0)
{
printf("队列已空无数据元素出队列!\n");
return 0;
}
else
{
*d=Q->queue;
Q->front =(Q->front + 1)%MaxQueueSize;
Q->count--;
return 1;
}
}
int QueueGet(SeqCQueue Q,DataType *d)
{
if(Q.count ==0)
{
printf("队列已空无数据元素可取!\n");
return 0;
}
else{
*d =Q.queue;
return 1;
}
}
void HuiWen(char str[])
{
SeqCQueue myQueue;
SeqStack myStack;
char x,y;
int i,length;
length = strlen(str);
QueueInitiate(&myQueue);
StackInitiate(&myStack);
for(i=0;i<length;i++)
{
QueueAppend(&myQueue,str);
StackPush(&myStack,str);
}
while(QueueNotEmpty(myQueue) == 1 && StackNotEmpty(myStack) == 1)
{
if(QueueDelete(&myQueue,&x) == 1
&& StackPop(&myStack,&y) == 1 && x != y)
{
printf("%s不是回文!\n",str);
return;
}
}
if(QueueNotEmpty(myQueue) || StackNotEmpty(myStack))
printf("%s不是回文!\n",str);
else
printf("%s是回文!\n",str);
}
void main()
{
char str1[]="ABCDEDCBA";
char str2[]="ABCDEDCAB";
HuiWen(str1);
HuiWen(str2);
}
谢谢你,你好人帮到底,在帮我查一个错吧
类似的错误,能运行,但明明是回文,却显示不是回文 强烈支持楼主ing……
页:
[1]