| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 899 人关注过本帖
标题:[求助]简单问题 判断字符串是否包含
只看楼主 加入收藏
红烟圈
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-8-8
收藏
 问题点数:0 回复次数:7 
[求助]简单问题 判断字符串是否包含

编写一个函数
如果字符串str1包含 字符串str2 返回1 不包含返回0

下面是我写的代码
#include<stdio.h>
#include<string.h>

int search(char str1[],char str2[])
{ int i,j,t=0;
for(i=0;i<strlen(str1);i++)
{while(str1[i]==str2[0])
{for(j=0;j<strlen(str2);j++)

if(str1[i]!=str2[j]) break;
else i++;
t=1;

}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}

在判定是否相等的地方有点问题
请教简单直接的方法

搜索更多相关主题的帖子: 简单问题 字符 判断 
2007-08-11 11:02
飞天佳星
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-8-9
收藏
得分:0 
回复:(红烟圈)[求助]简单问题 判断字符串是否包含

也不知你的意思是怎样的?
包含也有多种,一种是连续包含,一种是间接包含,我的是第二种,看是不是你要的。
#include<iostream>
using namespace std;
#include<string.h>
int search(char str1[],char str2[])
{ int len1,len2,i=0,j=0;
len1=strlen(str1);
len2=strlen(str2);
while(str1[i]&&str2[j])
{
if(str1[i]==str2[j])j++;
i++;
}
if(j==len2)return 1;
else return 0;
}
int main()
{
char str1[20],str2[20];
while(cin>>str1>>str2)
printf("%d\n",search(str1,str2));
return 0;
}


2007-08-11 12:04
红烟圈
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-8-8
收藏
得分:0 

我要的是连续包含

2007-08-11 12:14
飞天佳星
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-8-9
收藏
得分:0 
你去试一下。
#include<iostream>
using namespace std;
#include<string.h>
int search(char str1[],char str2[])
{ int k=0,i,flag,j;
int a=strlen(str1);
int b=strlen(str2);
for(i=0;a-i>=b;i++)
{ flag=0;
for(j=0;j<b;j++)
if(str1[i+j]!=str2[j])
{flag=1;break;}
if(flag==0)
return 1;
}
return 0;
}
int main()
{
char str1[20],str2[20];
while(cin>>str1>>str2)
printf("%d\n",search(str1,str2));
return 0;
}

2007-08-11 12:42
红烟圈
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-8-8
收藏
得分:0 

我用的是TC2.0
你这个部分看不懂
估计是编译器的问题
我更想知道的是我的怎么改

2007-08-11 14:26
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
收藏
得分:0 
kmp算 法??
模式匹配问题

惟有学习不断的学习!
2007-08-11 15:39
飞天佳星
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-8-9
收藏
得分:0 

现在应该对了吧?
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0,k,bo;
for(i=0;i<strlen(str1);i++)
{k=i;bo=0;while(str1[k]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[k]!=str2[j]) {bo=1;break;}*********bo=1标记不满足条件
else k++;
if(bo==0) *********这里bo=0就代表满足条件,直接返回1.
return 1;
else break; ********bo=1不满足跳出while循环,进行下一步。
}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}

你的代码:
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0;
for(i=0;i<strlen(str1);i++)
{while(str1[i]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[i]!=str2[j]) break;*********《1》***************
else i++; ********************《2》***********
t=1;

}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}
你在《1》处的break只是跳出了for循环,其实应该同时要跳出while循环,要不然只要进入了while循环中,
那个t无论如何都是1了。如果是因为有一个不相等而执行《1》处跳出了循环,那i也应该改回原值。
如:
ababc
abc
按你的做法,在i=2,j=2时,执行了《1》,如果i没改回去,再执行下一步就是比较str1[3](也就是b)与str1[0](a)
显然就比较不出了。我用k就是解决这一点。
这样说不知你清楚了吗?


2007-08-11 16:06
红烟圈
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-8-8
收藏
得分:0 
[CODE]
3积分的看来是
[/CODE]
2007-08-11 20:18
快速回复:[求助]简单问题 判断字符串是否包含
数据加载中...
 
   



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

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