我正在尝试从头开始编写strstr函数。我在调试器中逐行浏览了我的代码,它工作正常。但是,它没有保存正确搜索的子字符串的开头。因此,它没有正确地返回它。我没有太多的编程经验,所以我的代码有点混乱和复杂。但是,它在大多数情况下都有效。这是我的下面的代码(为我的教授评论,并为大家看看我做了什么)。 (另外,我的教授已表示接受goto功能)
char *strgstr(const char *str1, const char *str2)
{
//I went through this function line by line with the debugger
//The only problem with it is when I go to save the location of the
//substring in str1.
//I posted a question on stackoverflow and I was able to get it to compile
//but it still doesn't save and return properly. The rest of the function works.
int len_str1=strlen(str1);
int len_str2=strlen(str2);
char *save_str=NULL;
int i=0;
for(; i<len_str1; i++)
{
there:
if(str1[i]==str2[0]) //checks if this is the beginning of str2
{
save_str=(char*)str1[i]; //This is where the problem is.
int j=0; //start at beginning of str2
for(;i<len_str1;i++) //index str1
{
if(j<len_str2) //checks if we've finished searching str2
{
if(str1[i]!=str2[j])
{
goto there;
}
j++;
}
else
{
return save_str; //does not return properly. I can't figure out how to save a particular point in the index to a pointer.
}
}
}
}
}
答案 0 :(得分:3)
你写的行
save_str=(char*)str1[i]; //This is where the problem is.
应该是(例如)
save_str = str1 + i;
您的原始版本将字符的数值视为指针,这是完全错误的。
答案 1 :(得分:2)
为什么需要这么复杂的代码?
const char *strgcstr(const char *haystack, const char *needle)
{
while(*haystack!=0)
{
if( (*haystack == *needle) &&
(strncmp(haystack, needle, strlen(needle)) == 0) )
return haystack;
haystack++;
}
return NULL;
}
答案 2 :(得分: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;
}
}