我试图编写一个函数来返回字符串中第一个出现的子串的索引。
像搜索'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;
}
答案 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;
}