字符串匹配问题
本帖最后由 浮云骑士 于 2015-11-17 14:42 编辑#include<stdio.h>
#include<stdlib.h>
int index( char str1[], char str2[], int pos )
——{ //此处提醒。——conflicting types for built-in fuction 'index'.
int j=1;
int i=pos;
while( i<=str1 || j<=str2 )
{
if( str1 == str2 )
{
i++;
j++;
}
else
{
i = i-j+2;
j = 1;
}
}
if( j > str2 )
{
return i-str2;
}
else
{
return 0;
}
}
int main()
{
inta, pos=1;
char str1 =" ilovefishc.com";
char str2 =" fishc";
str1 = 14;
str2 = 5;
a=index( str1, str2, pos );
printf("The location of the start equal:");
printf("%d\n",a);
return 0;
}
很明显就是大括号少了啊 index函数没有右大括号 看的大神,我就说,我运行不了,有个提醒,求助一下。 运行测试了一下while( i<=str1 || j<=str2 )中间的或运算 改成与运算就可以了 ! 本帖最后由 浮云骑士 于 2015-11-20 18:07 编辑
y290176346 发表于 2015-11-20 08:49
运行测试了一下while( i
我改了,可还是有错误。#include<stdio.h>
#include<stdlib.h>
int index( char S[], char T[], int pos )
{
int i = pos; // i用于主串S中当前位置下标
int j = 1; // j用于子串T中当前位置下标
while( i <= S && j <= T ) // i或j其中一个到达尾部即终止搜索!
{
if( S == T ) // 若相等则继续下一个元素匹配
{
i++;
j++;
}
else // 若失配则j回溯到第一个元素从新匹配
{
i = i-j+2; // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
j = 1;
}
}
if( j > T )
{
return i - T;
}
else
{
return 0;
}
int main()
{
inta, pos=1;
char S =" ilovefishc.com";
char T =" fishc";
S = 14;
T = 5;
a=index( S, T, pos );
printf("The location of the start equal:");
printf("%d\n",a);
return 0;
}
有一个:C:\Users\pc-asus\Desktop\code file\lihongfei.c|46| error: syntax error at end of input|
有一个:C:\Users\pc-asus\Desktop\code file\lihongfei.c|5| warning: conflicting types for built-in function 'index'| 浮云骑士 发表于 2015-11-20 18:06
我改了,可还是有错误。
有一个:C:%users\pc-asus\Desktop\code file\lihongfei.c|46| error: synt ...
大神,帮忙看看,这20鱼币也给你。 本帖最后由 y290176346 于 2015-11-20 20:03 编辑
index 函数后面少了个大括号。嘎嘎 面壁思过去吧 感谢分享 鱼C工作室.YCGZS 发表于 2015-11-24 16:49
感谢分享
你是不是发水帖,会有惩罚的,我试过。 浮云骑士 发表于 2015-11-25 09:01
你是不是发水帖,会有惩罚的,我试过。
发错,不好意思 鱼C工作室.YCGZS 发表于 2015-11-25 13:10
发错,不好意思
为了每日完成任务,所以回复十次 鱼C工作室.YCGZS 发表于 2015-11-25 13:10
发错,不好意思
这个,好像每回复一条信息都有鱼币,所以,你懂的 很簡單 你的函式根本沒有給回傳值 林問 发表于 2015-12-28 02:21
很簡單 你的函式根本沒有給回傳值
不好意思我看錯了 你檢查看看int index( char S[], char T[], int pos )有沒有包起來
#include<iostream>
#include<cstring>
using namespace std;
typedef struct
{
char ch;
int length;
}SString;
void get_nextval(SString T,int next[])
{
int i=1;
next=0;
int j=0;
while(i<T.length)
{
if(j==0||T.ch==T.ch)
{
++i;
++j;
if(T.ch!=T.ch)
next=j;
else
next=next;
}
else
j=next;
}
}
int Index_KMP(SString S,SString T,int pos)
{
int next;
get_nextval(T,next);
cout<<"请输入S字符串:"<<endl;
cin>>S.ch;
cout<<"请输入T字符串:"<<endl;
cin>>T.ch;
cout<<"请输入主串中开始进行匹配的位置(首字符位置为1):";
cin>>pos;
S.length=strlen(S.ch);
T.length=strlen(T.ch);
int i=pos,j=1;
while(i<=S.length&&j<=T.length)
{
if(j==0||S.ch==T.ch)
{
++i;
++j;
}
else
j=next;
}
if(j>T.length)
return i-T.length;
else return 0;
}
int main()
{
SString S,T;
char ch;
int pos;
cout<<"是否进行测试(输入y或Y继续,任意其他键结束):";
cin>>ch;
while(ch=='y'||ch=='Y')
{
int result=Index_KMP(S,T,pos);
if(result!=0)
cout<<"主串与子串在主串的第"<<result<<"个字符处首次匹配"<<endl;
else
cout<<"匹配失败"<<endl;
cout<<"是否继续测试(输入y或Y继续,任意其他键结束):";
cin>>ch;
}
}
页:
[1]