输入两个字符串str1和str2,(str1>str2),判断str1里面是否有一段字符串和str2一样,有则匹配成功,没有则匹配失败?

luoyuxuan566 2012-10-07 05:36:53
int name(char *basestr,char *sourcestr,char *newstr)
{

}

这段程序如何写呢,比如str1=“abcdefgh”str2=“bcde”成功返回1,失败返回-1

谢谢~~~
...全文
2209 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoyuxuan566 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:

引用 5 楼 的回复:
C/C++ code

while(i<strlen1-strlen2+1&amp;amp;&amp;amp;!flag)
{
j=0;
k=i;
while(str2[j]!='\0'&amp;amp;&amp;amp;str1[k]==str2[j])
{j++; k++;}
if(s2[j……
[/Quote]

恩 其实这个问题就是strstr函数的编写。。。。

char *strstr(const char *s1, const char *s2)   
{   
int i;   
if (*s2)   
{   
while (*s1)   
{   
for (i=0; *(s1 + i) == *(s2 + i); i++)   
{   
if (!*(s2 + i + 1))   
return (char *)s1;   
}   
s1++;   
}   
return NULL;   
}   
else   
return (char *)s1;   
}
321haha 2012-10-07
  • 打赏
  • 举报
回复
伤不起啊,我写的程序太粗糙了,没法跟楼上们说的比啊。
321haha 2012-10-07
  • 打赏
  • 举报
回复
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
void main(void)
{
char str1[30],str2[30],*p;
cout<<"请输入字符串1"<<endl;
cin>>str1;
cout<<"请输入字符串2"<<endl;
cin>>str2;
if(strlen(str1)<strlen(str2))
cout<<"str2的长度大于str1,结束"<<endl;
else
{
p=strstr(str1,str2);
if(p)
cout<<"str1 include str2"<<endl;
else
cout<<"str1 not include str2"<<endl;
}
}
huangxy10 2012-10-07
  • 打赏
  • 举报
回复
用KMP算法吧,否则太简单了。
newtee 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 5 楼 的回复:
C/C++ code

while(i<strlen1-strlen2+1&amp;&amp;!flag)
{
j=0;
k=i;
while(str2[j]!='\0'&amp;&amp;str1[k]==str2[j])
{j++; k++;}
if(s2[j]=='\0')
{flag=1;break;}
i+……
[/Quote]就用while吧 这样容易懂 现在会了?
luoyuxuan566 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
C/C++ code

while(i<strlen1-strlen2+1&&!flag)
{
j=0;
k=i;
while(str2[j]!='\0'&&str1[k]==str2[j])
{j++; k++;}
if(s2[j]=='\0')
{flag=1;break;}
i++;
}
if(f……
[/Quote]

是不是用for会更好一点
321haha 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
结合使用strcmp和strstr函数。
[/Quote]
p=strstr(str1,str2);
newtee 2012-10-07
  • 打赏
  • 举报
回复
while(i<strlen1-strlen2+1&&!flag)
{
j=0;
k=i;
while(str2[j]!='\0'&&str1[k]==str2[j])
{j++; k++;}
if(s2[j]=='\0')
{flag=1;break;}
i++;
}
if(flag==1) 是子串
else 不是
图灵狗 2012-10-07
  • 打赏
  • 举报
回复
结合使用strcmp和strstr函数。
newtee 2012-10-07
  • 打赏
  • 举报
回复
while(str2[j]&&str1[k]==str2[j])
newtee 2012-10-07
  • 打赏
  • 举报
回复
int i=0,j,k,flag=0;
int strlen1,strlen2;
char str1[10]=你的母字符,str2[10]=你的子字符;
strlen1=strlen(str1);
strlen2=strlen(str2);
while(i<strlen1-strlen2+1&&!flag)
{
j=0;
k=i;
while(str2[10]&&str1[k]==str2[j])
{j++; k++;}
if(s2[j]=='\0')
{flag=1;break;}
i++;
}
if(flag==1) 是子串
else 不是
JiMoKuangXiangQu 2012-10-07
  • 打赏
  • 举报
回复
strstr()

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧