浮云骑士 发表于 2015-11-17 14:40:17

字符串匹配问题

本帖最后由 浮云骑士 于 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;
}

littlestar 发表于 2015-11-17 14:40:18

很明显就是大括号少了啊 index函数没有右大括号

浮云骑士 发表于 2015-11-17 14:45:04

看的大神,我就说,我运行不了,有个提醒,求助一下。

y290176346 发表于 2015-11-20 08:49:05

运行测试了一下while( i<=str1 || j<=str2 )中间的或运算 改成与运算就可以了 !

浮云骑士 发表于 2015-11-20 18:06:26

本帖最后由 浮云骑士 于 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:09:18

浮云骑士 发表于 2015-11-20 18:06
我改了,可还是有错误。

有一个:C:%users\pc-asus\Desktop\code file\lihongfei.c|46| error: synt ...

大神,帮忙看看,这20鱼币也给你。

y290176346 发表于 2015-11-20 20:01:42

本帖最后由 y290176346 于 2015-11-20 20:03 编辑

index 函数后面少了个大括号。嘎嘎 面壁思过去吧

鱼C工作室.YCGZS 发表于 2015-11-24 16:49:40

感谢分享

浮云骑士 发表于 2015-11-25 09:01:59

鱼C工作室.YCGZS 发表于 2015-11-24 16:49
感谢分享

你是不是发水帖,会有惩罚的,我试过。

鱼C工作室.YCGZS 发表于 2015-11-25 13:10:45

浮云骑士 发表于 2015-11-25 09:01
你是不是发水帖,会有惩罚的,我试过。

发错,不好意思

鱼C工作室.YCGZS 发表于 2015-11-25 13:12:03

鱼C工作室.YCGZS 发表于 2015-11-25 13:10
发错,不好意思

为了每日完成任务,所以回复十次

鱼C工作室.YCGZS 发表于 2015-11-25 13:14:45

鱼C工作室.YCGZS 发表于 2015-11-25 13:10
发错,不好意思

这个,好像每回复一条信息都有鱼币,所以,你懂的

莫欺少年穷 发表于 2015-12-23 20:27:01

林問 发表于 2015-12-28 02:21:28

很簡單 你的函式根本沒有給回傳值

林問 发表于 2015-12-28 02:24:05

林問 发表于 2015-12-28 02:21
很簡單 你的函式根本沒有給回傳值

不好意思我看錯了 你檢查看看int index( char S[], char T[], int pos )有沒有包起來

我是0和1 发表于 2016-4-29 16:38:42

#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]
查看完整版本: 字符串匹配问题