| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖
标题:我想问一下,这个程序应该怎么改才可以得到正确的答案?弄不明白,请各位高 ...
只看楼主 加入收藏
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 9楼 pangding
我们这个学期刚刚开的数据结构课程,有很多东西都不懂,这个程序弄了很久都没有找到错在哪里。
谢谢你的指点。上课的时候再问问老师。
2011-04-29 22:10
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:3 
首先 我不知道你这个代码是想实现什么功能 但是我觉得你的错在这strcmp里的
       if(j>t->lenght)
            return (i-t->lenght+1);   
        else
            return 0;
你这里它始终执行的是else下面的 所以一直出现0 你说说你想输出什么 我在看看
2011-04-29 22:16
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:3 
这个与数据结构的关系不大,主要是一些细节与知识点的问题、另外LZ写的程序很难让人明白你要干什么,还非得仔细琢磨下。
你也不写下说明的、

离恨恰如春草,更行更远还生。
2011-04-29 22:21
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 11楼 棉雨
用串的strlen(SeqString *s)(求串长)、strcmp(SeqString *s,SeqString *t)(串的比较)、SubStr(SeqString *s,int pos,int len,SeqString *sub)(求子串)这三个串的基本操作来构造子串定位运算index(SeqString *s,SeqString *t).就是说,用那三个基本操作来实现子串定位操作的算法。
2011-04-30 10:24
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 13楼 玩出来的代码
我本来发表之前说要写说明要干什么的,忘记了,发表了才发现没写说明。呵呵,下次一定想好了再发表。
2011-04-30 10:29
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 12楼 辰星睿
不好意思,我又回复错了……我是想用串的strlen(SeqString *s)(求串长)、strcmp(SeqString *s,SeqString *t)(串的比较)、SubStr(SeqString *s,int pos,int len,SeqString *sub)(求子串)这三个串的基本操作来构造子串定位运算index(SeqString *s,SeqString *t).就是说,用那三个基本操作来实现子串定位操作的算法。最后输出的是模式串(也就是t串)在主串(串s)第一次出现时的首字符对应串s的位置。
2011-04-30 10:37
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
返回的位置是从下标0开始计的还是1?就是说如果第一个字符就匹配上了,是返回 0 还是返回 1?
2011-04-30 12:39
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 17楼 pangding
如果模式串只有一个字符,而且跟主串的第一个祖父相匹配,我想应该是返回1.
我这里for(i=1,j=1;i<s->lenght,j<t->lenght;)写错了,应该是i<=s->lenght&&j<=t->lenght才对。
2011-04-30 18:29
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:0 
回复 16楼 棉雨
不好意思 很久没上了 我给你改了下 你先自己想想 还不清楚的话再说吧
#include"iostream"
#define Max 256
using namespace std;
typedef struct
{
    char ch[Max];
    int lenght;
}
SeqString;
void InitString(SeqString *s)
{
    char ch;
    int i=0;
    while((ch=getchar())!='\n'&&i<Max)
        s->ch[i++]=ch;
    s->lenght=i;
}
int Strlen(SeqString *s)
{
    return (s->lenght);
}
SeqString *substr(SeqString *s,int pos,int len,SeqString *sub)
{
    int i;
    if(pos<1||pos>s->lenght||len<1||len>s->lenght)
    {
        cout<<"error!!"<<endl;
    return NULL;
    }
    for(i=0;i<len;i++)
        sub->ch[i]=s->ch[pos+i-1];
    sub->lenght=len;
    return (sub);
}
int strcmp(SeqString *s,SeqString *t)
{
    int i,j;
    for(i=0,j=0;i<s->lenght,j<t->lenght;)
        {
            if(s->ch[i]==t->ch[j])
            {
                i++;
                j++;
            }
            else
            {
               
                i++;
            }
        }
    return (i-t->lenght+1);
   
}
void main()
{
    int i,k;
    SeqString s,t,r;
    cout<<"构造一个串s!!"<<endl;
    InitString(&s);
    cout<<"构造一个串t!!"<<endl;
    InitString(&t);
    cout<<"请输入子串在主串中位置:";
    cin>>i;
    if(s.ch[i-1]!=t.ch[0])
    {    cout<<endl<<"位置错误! 输出的是错误数据!!"<<endl;}
    k=strcmp(&s,substr(&s,i,Strlen(&t),&r));
    cout<<k<<endl;
}
2011-05-03 00:24
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:0 
不好意思 很久没上了 我给你改了下 你先自己想想 还不清楚的话再说吧
#include"iostream"
#define Max 256
using namespace std;
typedef struct
{
    char ch[Max];
    int lenght;
}
SeqString;
void InitString(SeqString *s)
{
    char ch;
    int i=0;
    while((ch=getchar())!='\n'&&i<Max)
        s->ch[i++]=ch;
    s->lenght=i;
}
int Strlen(SeqString *s)
{
    return (s->lenght);
}
SeqString *substr(SeqString *s,int pos,int len,SeqString *sub)
{
    int i;
    if(pos<1||pos>s->lenght||len<1||len>s->lenght)
    {
        cout<<"error!!"<<endl;
    return NULL;
    }
    for(i=0;i<len;i++)
        sub->ch[i]=s->ch[pos+i-1];
    sub->lenght=len;
    return (sub);
}
int strcmp(SeqString *s,SeqString *t)
{
    int i,j;
    for(i=0,j=0;i<s->lenght,j<t->lenght;)
        {
            if(s->ch[i]==t->ch[j])
            {
                i++;
                j++;
            }
            else
            {
               
                i++;
            }
        }
    return (i-t->lenght+1);
   
}
void main()
{
    int i,k;
    SeqString s,t,r;
    cout<<"构造一个串s!!"<<endl;
    InitString(&s);
    cout<<"构造一个串t!!"<<endl;
    InitString(&t);
    cout<<"请输入子串在主串中位置:";
    cin>>i;
    if(s.ch[i-1]!=t.ch[0])
    {    cout<<endl<<"位置错误! 输出的是错误数据!!"<<endl;}
    k=strcmp(&s,substr(&s,i,Strlen(&t),&r));
    cout<<k<<endl;
}
2011-05-03 00:25
快速回复:我想问一下,这个程序应该怎么改才可以得到正确的答案?弄不明白,请各 ...
数据加载中...
 
   



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

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