| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 965 人关注过本帖
标题:这是一个关于字符串匹配的问题,但是有问题,求教 谢谢
取消只看楼主 加入收藏
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
结帖率:100%
收藏
 问题点数:0 回复次数:9 
这是一个关于字符串匹配的问题,但是有问题,求教 谢谢
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const n=100;
const m=50;

int stringmatch(char ch1[],char ch2[])
{
    int i,j;
    for(i=0;i<n-m;)
    {
        j=0;
        while(j<m&&ch2[j]==ch1[i+j])
        {
            j=j+1;
            if(j=m)
                return i;
        }
    return 0;
    }
}

void main()
{
    int k;
    char c1[n];
    char c2[m];
    cout<<"请输入第一串字符:"<<endl;
    cin.getline(c1,n-1);
    cout<<"第一串字符为:"<<c1<<endl;
    cout<<"请输入第二串字符:"<<endl;
    cin.getline(c2,m-1);
    cout<<"第二串字符为:"<<c2<<endl;
    k=stringmatch(c1,c2);
    if(k==-1)
        cout<<"匹配失败!"<<endl;
    else
        cout<<k<<endl;
}

[ 本帖最后由 一条沙丁鱼 于 2015-4-5 20:47 编辑 ]
搜索更多相关主题的帖子: include return 字符串 
2015-04-05 20:37
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
求大神们帮忙看看,我新手上路,明天就要交作业,自己觉得没问题,可是运行的时候达不到想要的结果。
2015-04-05 20:48
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
求大神帮忙,我这个只能比较出如果第一个字符相同的情况,没法比较出不同的两个字符串和第一个字符不相同的情况
2015-04-05 21:17
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 4楼 wmf2014
后来发现那里有问题了,但是改了之后还是有问题。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const n=100;
const m=50;

int stringmatch(char ch1[],char ch2[])
{
    int i,j;
    for(i=0;i<=n-m;i++)
    {
        for(j=0;;)
        {
            if(j<m)
            {
                if(ch2[j]==ch1[i+j])
                    j=j+1;
                else
                    break;
            }
            if(j==(m+1))
                return 1;
        }
    }
    return 0;
}

void main()
{
    int k,i;
    char c1[n];
    char c2[m];
    cout<<"请输入第一串字符:"<<endl;
    cin.getline(c1,n-1);
    cout<<"第一串字符为:"<<c1<<endl;
    cout<<"请输入第二串字符:"<<endl;
    cin.getline(c2,m-1);
    cout<<"第二串字符为:"<<c2<<endl;
    k=stringmatch(c1,c2);
    if(k==0)
        cout<<"匹配失败"<<endl;
    else
        cout<<"匹配成功"<<endl;
}
这样子不论输入的是否可以匹配,均显示匹配失败,求大神再费神看看。
2015-04-06 09:01
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 6楼 诸葛欧阳
意思就是想通过这段代码完成类似这样的操作,比如输入的第一组字符串为:wearertheyouth。如果第二组字符串为are,则在第一组中可以找到,故为匹配成功,如果输入的第二组字符串为sun,在第一组中找不到,则为匹配失败。就这样。编译没问题,但是不论我输入的第二组字符串为are还是sun,都输出的是匹配失败。所以帮忙看看,问题出在哪了,感激不尽。
2015-04-06 11:54
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 8楼 wmf2014
首先,字符串匹配的两个字符不一定都一样,第二串字符在第一串字符中可以找到就是匹配成功,你改成的那段函数我尝试了一下是两个字符串完全相同时便是匹配成功,所以只比较第一串字符串的第i个位置指向的字符是否和第二串一样。我想完成的是蛮力法字符串匹配,就是说第一个字符串是文本,第二个字符串是模板,在第一组字符串中找是否有第二组字符串,比如第一组字符串为:wearetheyouth;第二串字符串为:ear;这样的情况下也是可以的,所以我第一个for循环只用循环到n-m就可以(n为第一组字符串的长度,m为第二组字符串的长度,如果i小于n-m,就不用比较了)。不知道这样说可不可以明白,如果在这样的情况下,大神可以再帮忙看看吗?究竟是哪里出了问题?
2015-04-06 22:46
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 8楼 wmf2014
另外,很抱歉我是初学者,自己看的c++的书,不太明白j=j+ch1[i]^ch2[i];这一语句的意思,还望指教
2015-04-06 22:48
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 11楼 wmf2014
大神,我照你改的调试运行了一下,第一次的时候我输入的是wearetheyouth,和ear,显示匹配成功,但是之后换别的字符串进行运行都显示失败,我上传了照片,麻烦了再帮忙看看,谢谢!
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-04-07 18:55
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 11楼 wmf2014
可以了,谢谢大神,没有问题了
2015-04-07 20:31
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 12楼 yangfrancis
恩恩,后期调试的时候发现了,需要确定第二个字符串的长度问题,之前没有想到用strlen这个函数,多谢!
2015-04-07 21:18
快速回复:这是一个关于字符串匹配的问题,但是有问题,求教 谢谢
数据加载中...
 
   



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

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