鱼C论坛

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

字符串匹配问题

[复制链接]
发表于 2015-11-17 14:40:17 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 浮云骑士 于 2015-11-17 14:42 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int index( char str1[], char str2[], int pos )
  4. ——{                                                                        //此处提醒。——conflicting types for built-in fuction 'index'.
  5.     int j=1;
  6.     int i=pos;

  7.     while( i<=str1[0] || j<=str2[0] )
  8.     {
  9.         if( str1[i] == str2[j] )
  10.         {
  11.             i++;
  12.             j++;
  13.         }
  14.         else
  15.         {
  16.             i = i-j+2;
  17.             j = 1;
  18.         }
  19.     }

  20.     if( j > str2[0] )
  21.     {
  22.         return i-str2[0];
  23.     }
  24.     else
  25.     {
  26.         return 0;
  27.     }
  28. }

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

  34.     str1[0] = 14;
  35.     str2[0] = 5;
  36.     a=index( str1, str2, pos );

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

  39.     return 0;
  40. }
复制代码

最佳答案

查看完整内容

很明显就是大括号少了啊 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


我改了,可还是有错误。
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int index( char S[], char T[], int pos )
  4. {
  5.         int i = pos;        // i用于主串S中当前位置下标
  6.         int j = 1;                // j用于子串T中当前位置下标

  7.         while( i <= S[0] && j <= T[0] )        // i或j其中一个到达尾部即终止搜索!
  8.         {
  9.                 if( S[i] == T[i] )        // 若相等则继续下一个元素匹配
  10.                 {
  11.                         i++;
  12.                         j++;
  13.                 }
  14.                 else                                // 若失配则j回溯到第一个元素从新匹配
  15.                 {
  16.                         i = i-j+2;                // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
  17.                         j = 1;
  18.                 }
  19.         }

  20.         if( j > T[0] )
  21.         {
  22.                 return i - T[0];
  23.         }
  24.         else
  25.         {
  26.                 return 0;
  27.         }

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

  33.     S[0] = 14;
  34.     T[0] = 5;
  35.     a=index( S, T, pos );

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

  38.     return 0;
  39. }
复制代码


有一个: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-4-19 20:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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