使用strstr计算错误

时间:2013-10-04 19:21:21

标签: c++ string pointers strstr

我试图编写一个函数来返回字符串中第一个出现的子串的索引。

像搜索'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;
}

3 个答案:

答案 0 :(得分: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";

答案 1 :(得分:0)

使用指针算法怎么样?

int findSubstring(char *s, char substring[])
{   
    char* strPtr = strstr(s, substring);
    if (strPtr != NULL)
    {
        return (int)(strPtr - s);
    }
    else
    {
        return -1;  //no match
    }
}

答案 2 :(得分:0)

将您修改为,请参阅this example

 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;
}