鱼C论坛

 找回密码
 立即注册
查看: 4365|回复: 15

字符串匹配问题

[复制链接]
发表于 2015-11-17 14:40:17 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 浮云骑士 于 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[0] || j<=str2[0] )
    {
        if( str1[i] == str2[j] )
        {
            i++;
            j++;
        }
        else
        {
            i = i-j+2;
            j = 1;
        }
    }

    if( j > str2[0] )
    {
        return i-str2[0];
    }
    else
    {
        return 0;
    }
}

int main()
{
    int  a, pos=1;
    char str1[20] =" ilovefishc.com";
    char str2[20] =" fishc";

    str1[0] = 14;
    str2[0] = 5;
    a=index( str1, str2, pos );

    printf("The location of the start equal:");
    printf("%d\n",a);

    return 0;
}

最佳答案

查看完整内容

很明显就是大括号少了啊 index函数没有右大括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 14:40:18 | 显示全部楼层
很明显就是大括号少了啊 index函数没有右大括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-17 14:45:04 | 显示全部楼层
看的大神,我就说,我运行不了,有个提醒,求助一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-20 08:49:05 | 显示全部楼层
运行测试了一下while( i<=str1[0] || j<=str2[0] )  中间的或运算 改成与运算就可以了 !
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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[0] && j <= T[0] )        // i或j其中一个到达尾部即终止搜索!
        {
                if( S[i] == T[i] )        // 若相等则继续下一个元素匹配
                {
                        i++;
                        j++;
                }
                else                                // 若失配则j回溯到第一个元素从新匹配
                {
                        i = i-j+2;                // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
                        j = 1;
                }
        }

        if( j > T[0] )
        {
                return i - T[0];
        }
        else
        {
                return 0;
        }

int main()
{
    int  a, pos=1;
    char S[20] =" ilovefishc.com";
    char T[20] =" fishc";

    S[0] = 14;
    T[0] = 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'|
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-20 18:09:18 | 显示全部楼层
浮云骑士 发表于 2015-11-20 18:06
我改了,可还是有错误。

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

大神,帮忙看看,这20鱼币也给你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-20 20:01:42 | 显示全部楼层
本帖最后由 y290176346 于 2015-11-20 20:03 编辑

index 函数后面少了个大括号。嘎嘎 面壁思过去吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-24 16:49:40 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-25 09:01:59 | 显示全部楼层

你是不是发水帖,会有惩罚的,我试过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-25 13:10:45 | 显示全部楼层
浮云骑士 发表于 2015-11-25 09:01
你是不是发水帖,会有惩罚的,我试过。

发错,不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-25 13:12:03 | 显示全部楼层

为了每日完成任务,所以回复十次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-25 13:14:45 | 显示全部楼层

这个,好像每回复一条信息都有鱼币,所以,你懂的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-12-23 20:27:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-28 02:21:28 | 显示全部楼层
很簡單 你的函式根本沒有給回傳值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-28 02:24:05 | 显示全部楼层
林問 发表于 2015-12-28 02:21
很簡單 你的函式根本沒有給回傳值

不好意思我看錯了 你檢查看看int index( char S[], char T[], int pos )有沒有包起來
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-29 16:38:42 | 显示全部楼层
#include<iostream>
#include<cstring>
using namespace std;

typedef struct
{
        char ch[50];
        int length;
}SString;

   
  void get_nextval(SString T,int next[])
  {
          int i=1;
          next[1]=0;
          int j=0;
          while(i<T.length)
          {
                  if(j==0||T.ch[i]==T.ch[j])
                  {
                          ++i;
                          ++j;
                          if(T.ch[i]!=T.ch[j])
                          next[i]=j;
                          else
                          next[i]=next[j];
                  }
                  else
                  j=next[j];
          }
  }

  int Index_KMP(SString S,SString T,int pos)
{
            int next[255];
                 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[i]==T.ch[j])
                {
                        ++i;
                        ++j;
                 }
                 else
         j=next[j];
         }
         
         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;
          }
   }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表