| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 967 人关注过本帖
标题:这是一个关于字符串匹配的问题,但是有问题,求教 谢谢
只看楼主 加入收藏
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
结帖率:100%
收藏
 问题点数:0 回复次数:14 
这是一个关于字符串匹配的问题,但是有问题,求教 谢谢
#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
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
if(j=m)//该语句明显错误
你main里是判断-1为匹配失败的,但stringmatch函数里无-1返回

能编个毛线衣吗?
2015-04-05 22:27
一条沙丁鱼
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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
什么是匹配?不过看起来应该不复杂仔细改能改出来

一片落叶掉进了回忆的流年。
2015-04-06 11:35
一条沙丁鱼
Rank: 1
等 级:新手上路
威 望:1
帖 子:44
专家分:7
注 册:2015-4-5
收藏
得分:0 
回复 6楼 诸葛欧阳
意思就是想通过这段代码完成类似这样的操作,比如输入的第一组字符串为:wearertheyouth。如果第二组字符串为are,则在第一组中可以找到,故为匹配成功,如果输入的第二组字符串为sun,在第一组中找不到,则为匹配失败。就这样。编译没问题,但是不论我输入的第二组字符串为are还是sun,都输出的是匹配失败。所以帮忙看看,问题出在哪了,感激不尽。
2015-04-06 11:54
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
不知道我的理解是否有错:所谓匹配就是指字符串完全相同。
如果是这样,你有几个错误:
1、字符串有自己的格式,通过判断'\0'判断字符串是否结束,完全不需要判断整个字符串的长度,无需n、m常量
2、即使判断整个数组,也是判断长度最短的那个数组,不知道你为什么会是0至n-m,只不过你n-m=m所以可能侥幸让你的代码通过。
3、无需使用循环嵌套,一个循环即可。
修改后函数部分代码如下,替换原函数即可:
int stringmatch(char ch1[],char ch2[])
{
    int i,j;
    for(i=0,j=0;!j&&ch1[i]&&ch2[i];i++)j=j+ch1[i]^ch2[i];
    j=j+ch1[i]^ch2[i];//再做一次字符串结尾的运算,防止前面相同但ch2长度大于ch1
    if(j)j=1;//
    return !j;
}

能编个毛线衣吗?
2015-04-06 12:08
一条沙丁鱼
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
快速回复:这是一个关于字符串匹配的问题,但是有问题,求教 谢谢
数据加载中...
 
   



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

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