| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1344 人关注过本帖
标题:字符查找;
只看楼主 加入收藏
guoyangdnb
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-12-14
结帖率:100%
收藏
 问题点数:0 回复次数:3 
字符查找;
字符串匹配是计算机科学中最古老、研究最广泛的问题之一。它的应用包括生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测。
输入一个主串str和一个要查找的子串substr,输出子串substr在主串str中首次出现的位置。例如主串str为:ababcabababab,子串为ababa,则子串在主串中首次出现的位置为5。

输入
       有两行。第1行为主串str,第2行为要查找的子串substr。主串长度不超过100,子串长度小于等于主串长度。

输出
       子串substr在主串str中首次出现的位置,如果没有出现,输出-1。

样例输入
Copy Sample Input
ababcabababab
ababa
样例输出
Copy Sample Output
5
搜索更多相关主题的帖子: 查找 出现 str 输出 子串 
2020-12-15 19:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
你先说说你哪里不会?

最起码朴素查找算法(C标准库中的 strstr 函数)幼儿园小朋友也能理解吧
如果你想要 KMP 算法,网上都的是。(虽然 KMP 算法很骚,但其实运行效率还不如朴素查找算法)
既骚又效率高的,可以参见C++的std::boyer_moore_searcher和std::boyer_moore_horspool_searcher
2020-12-15 19:57
guoyangdnb
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-12-14
收藏
得分:0 
回复 2楼 rjsp
#include <stdio.h>
#include <string.h>
int main()
{
    char a[100],b[100];
    int i,j,k=0,flag=0,len,flag2=0;
    gets(a);
    gets(b);
    len=strlen(b);
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]==b[0])
        {
            for(j=i;a[j]!='\0';j++)
            {
               if(a[j]==b[k]&&b[k]!='\0')
               {
                   k++;
                   flag++;
                   if(flag==len) {printf("%d",k);flag2++;}
               }
               else break;
            }
        }
    }
    if(flag2==0) printf("-1");
    return 0;
}
这是我一开始写的;
2020-12-15 20:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 3楼 guoyangdnb
我帮你代码整理了一下,变得清晰易懂,但算法没变(虽然算法有很多可改进的地方)

程序代码:
#include <stdio.h>

int main( void )
{
    char a[101], b[101];
    scanf( "%[^\n]%*c", a );
    scanf( "%[^\n]%*c", b );
    
    for( size_t i=0; a[i]!='\0'; ++i )
    {
        if( a[i] == b[0] )
        {
            size_t j;
            for( j=0; b[j]!='\0' && a[i+j]==b[j]; ++j );
            if( b[j] == '\0' )
            {
                printf( "%zu\n", i );
                return 0;
            }
        }
    }
    puts( "-1" );
}
2020-12-15 20:25
快速回复:字符查找;
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017418 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved