0

我正在尝试编写一个函数,该函数返回字符串中第一次出现子字符串的索引。

就像在摩天大楼中搜索“ysc”会返回 2。

似乎 strstr 正在完成它的工作,因为在 while 循环之后它输出了正确的子字符串的第一个字符,但它没有正确计数并返回正确的 int。

我可能设置错误,因为我将数组传递给函数并且在尝试使用嵌套循环时遇到了很多错误,所以我尝试了一个 while 循环,而不是编译但没有正确输出。

我对指针仍然很陌生,并将它们作为争论传递,所以那里可能存在问题。

有什么帮助!

int findSubstring(char *s, char substring[])
{   
    int j = 1;
    char* strPtr = NULL;

    while (strPtr == NULL)
    {
        strPtr = strstr(s, substring);
        if (strPtr != NULL)
            break;
        j++;
    }

    cout << *strPtr << endl;
    cout << "The substring begins at element: " << j << endl;
    return j;
}
4

3 回答 3

0

你似乎把任务复杂化了,因为你使用的是 C++,你应该使用std::string::find.

std::string s = "skyscraper";
std::size_t pos = s.find("ysc");
if( pos != std::string::npos )
    std::cout << "ysc found at " << pos << "\n";
else
    std::cout << "ysc not found" << "\n";
于 2013-10-04T19:32:50.127 回答
0

只使用指针算术怎么样?

int findSubstring(char *s, char substring[])
{   
    char* strPtr = strstr(s, substring);
    if (strPtr != NULL)
    {
        return (int)(strPtr - s);
    }
    else
    {
        return -1;  //no match
    }
}
于 2013-10-04T19:32:51.407 回答
0

修复你的,参考这个例子

 int findSubstring(char *s, char substring[]) 
{
    char* pos = strstr(s, substring);
    if(pos) 
     return (int)(pos - s);
    else -1;
}

而且您使用的是 C++,那么,为什么不std::string呢?

 int findSubstring(const std::string& s, const std::string& substring)
{   

std::size_t j =s.find(substring);
return ( j!=std::string::npos) ? j :-1;
}
于 2013-10-04T19:33:51.620 回答