我已经实现了strstr()但是代码没有用,请帮助:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
char* mystrstr(char*,char*);
int main()
{
char *s1,*s2,*flag;
printf("Enter a string:\n ");
gets(s1);
printf("Enter a word to find in it:\n");
gets(s2);
flag=mystrstr(s1,s2);
if(flag)
printf("Word found\n");
else
printf("Word not found");
getch();
return 0;
}
char* mystrstr(char* s1,char* s2)
{ int flag=0,j,i;
char* temp;
for(i=0;i<strlen(s1);i++)
{ if(*(s1+1)==s2[0])
{
for(j=1;*s2;j++)
{
if(*(s1+i)==*(s2+j))
flag=1;
else
flag=0;
}
}
}
if(flag)
{
temp=(char*)malloc(sizeof(char*));
itoa(j,temp,10);
return *temp;
}
return 0;
}
答案 0 :(得分:3)
一些快速提示:
答案 1 :(得分:3)
对于初学者,您可能想要了解“获取”的工作方式: http://en.wikipedia.org/wiki/Gets
您只是在main方法中声明堆栈上的指针。这些指针可能指向一些随机内存。如上面的注释所述,您必须使用'malloc'(s1 = malloc(256);
)在堆上分配内存,或者使用f.ex在堆栈上分配内存。 “char s1[256];
”等然后将地址传递给它以获取“gets(&s1);
”而不是
答案 2 :(得分:1)
conio.h不是ANSI C
getch不是ANSI C
itoa不是ANSI C
您的函数返回一个字符串,其中包含s2中的positionnumber。这适合你吗?
必须释放回报。
您知道阵列访问吗?优于*(s2+j)
的是s2[j]
。
if(*(s1+1)==s2[0])
应该是if(*(s1+i)==s2[0])
吗?
for(j=1;*s2;j++)
应该是for(j=1;s2[j];j++)
吗?
如果flag=0
缺少休息时间,请参阅其他答案。
答案 3 :(得分:0)
for(i=0;i<strlen(s1);i++)
{
for(j=0;strlen(s2);j++)//and here
{
if(*(s1+i+j)==*(s2+j)){//here
flag=1;}
else{
flag=0;break}
}
if(flag){break;}
}
答案 4 :(得分:0)
您是否检查过第一个字符?
if(*(s1+1)==s2[0]) // you are checking s1[1] against s2[0]
这是无限循环,除非s2 [0]首先是空字符,或者你使用break从循环中断;
for(j=1;*s2;j++)
一种重要的方法供您参考:
char* my_strstr(char* s1, char* s2) {
// return null pointer for empty strings
if (strlen(s1) == 0 || strlen(s2) == 0)
return 0;
// recursive part
if (s1[0] == s2[0]) {
if (strlen(s2+1) == 0 || (strlen(s2+1) != 0 && my_strstr(s1+1, s2+1) == s1+1))
return s1;
}
else return 0;
}
答案 5 :(得分:0)
实现strstr()
的Java代码class Solution {
public int strStr(String haystack, String needle) {
String res ="";
int pos = 0;
if(needle.length() == 0){
return 0;
}
if(haystack.equals(needle)){
return 0;
}
if (needle.length()>haystack.length()||haystack.length() == 0){
return -1;
}
for(int i =0; i<haystack.length();i++){
if(haystack.charAt(i) == needle.charAt(0)){
if(i+needle.length() <= haystack.length()){
res = haystack.substring(i,i+(needle.length()));
if (res.equals(needle)){
pos = i;
return pos;
}
}
else{
return -1;
}
}
else{
continue;
}
}
return -1;
}
}