串求指导

#include<stdio.h>#include<string.h>typedefstruct{char*ch;intlength;}sstring;intsubstr... #include<stdio.h>
#include<string.h>
typedef struct{
char *ch;
int length;
}sstring;

int substring(sstring *sub,sstring *s,int pos,int len){
if(pos<1 || pos > s[0] ||len<0|| len>s[0]-pos+1)
return 0;
sub[1..len]=s[pos..pos+len-1];
sub[0]=len;
return 1;
}

int strcompare(sstring *sub,sstring *t){
for(i=0;i<s->length && i<t->length;++i)
if (s->ch[i]!=t->ch[i]) return s->ch[i]-t->ch[i];
return s->length-t->length;
}

int index (sstring *s,sstring *t, int pos){
if(pos>0){
n=strlength(s);
m=strlength(t);
i=pos;
int j=0;
while(i<=n-m+1){
substring(sub,s,i,m);
if(strcompare(sub,t)!=0) ++i;
else j++;return i,j;
}
}
retuen 0;
}/*求子串位置和出现次数*/

void main()
{
char line[100];
char word[20];
int i, j;
printf("请输入英文句子:");
scanf("%100[^\n]", line);
getchar();
printf("请输入需要查找的单词:");
scanf("%20[^\n]", word);
sstring s,t,sub;
substring(&sub,&s);
strcompare(&sub,&t);
index (&s,&t);

printf("单词共出现了: %d次.\n", j);
printf("单词出现的位置: %s\n", i);
}
数据结构的题目,有好多错误不会改啊,各位大神帮帮忙
题目要求输入一以回车结束的字符串;求主串中指定单词出现的次数和位置。
int substring(sstring *sub,sstring *s,int pos,int len){
if(pos<1 || pos > s->length ||len<0|| len>s->length-pos+1)
return 0;
else{
sub->ch[0.. len-1]=s->ch[pos-1.. pos+len-2];
sub->length=len;
}
return 1;
}

int strcompare(sstring *sub,sstring *t){
int i;
char s[];
for(i=0;i<s->length && i<t->length;++i)
if (s->ch[i]!=t->ch[i]) return s->ch[i]-t->ch[i];
return s->length-t->length;
}
展开
 我来答
忘至白葬不情必0T
2011-11-30 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
我感觉你就是直接把数据结构的伪码算法照抄下来了吧。你没学C语言就学数据结构么?
把C语言学好再说吧。
更多追问追答
追问
C语言基础不好,现在学数据结构好困难,求大神帮忙改下这道题吧
追答
代码就这样了,你自己一句句看吧。

#include
#include
#include "stdlib.h"
typedef struct{
char *ch;
int length;
}sstring;

//注意这是C语言,数组下标从0开始
int substring(sstring *sub,sstring *s,int pos,int len){
if(pos s->length ||lens->length)
{
return 0;
}
free(sub->ch); //为防止sub中原来有数据,要先清空sub的数据
sub->ch=(char *)malloc(sizeof(char)*(len+1));//再重新分配内存
sub->length=len;
for(int i=0;ich[i]=s->ch[pos+i];
sub->ch[i]='\0';
return 1;
}

int strcompare(sstring *s,sstring *t){
for(int i=0;ilength && ilength;++i)
if (s->ch[i]!=t->ch[i]) return s->ch[i]-t->ch[i];
return 0;
}

int index (sstring *s,sstring *t, int &pos){
if(pos>=0 && pos+t->lengthlength){
int n=s->length;
int m=t->length;
int i=pos;
sstring sub;
sub.ch=NULL;
sub.length=0;
while(i<=n-m+1){
substring(&sub,s,i,m);
if(strcompare(&sub,t)==0)
{
pos=i;
return 1;
}
i++;
}
}
return 0;
}/*求子串位置和出现次数*/

void main()
{
char line[100];
char word[20];
sstring s,t,sub; //声明要在函数的开始
int pos=0;
int cnt=0;

printf("请输入英文句子:");
scanf("%100[^\n]", line);
getchar();
printf("请输入需要查找的单词:");
scanf("%20[^\n]", word);
s.length=strlen(line);
s.ch=(char *)malloc(sizeof(char)*(s.length+1));
strcpy(s.ch,line);
t.length=strlen(word);
t.ch=(char *)malloc(sizeof(char)*(t.length+1));
strcpy(t.ch,word);
sub.ch=NULL;
sub.length=0;
while(index (&s,&t,pos))
{
printf("单词出现的位置: %d\n", pos);
cnt++;
pos++;
}

printf("单词共出现了: %d次.\n", cnt);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式