C++ 使用strstr时计数不正确
我正在尝试编写一个函数,返回字符串中第一次出现的子字符串的索引 就像在摩天大楼中搜索“ysc”会返回2 看起来strstr正在做它的工作,因为在while循环之后,它输出子字符串的正确的第一个字符,但是它没有正确计数并返回正确的int 我可能设置错误,因为我正在向函数传递一个数组,并且在尝试使用嵌套循环时遇到了很多错误,因此我尝试了一个while循环,它可以编译,但输出不正确 我对指针还是相当陌生,并将它们作为论据传递,因此可能存在问题 什么都行C++ 使用strstr时计数不正确,c++,string,pointers,strstr,C++,String,Pointers,Strstr,我正在尝试编写一个函数,返回字符串中第一次出现的子字符串的索引 就像在摩天大楼中搜索“ysc”会返回2 看起来strstr正在做它的工作,因为在while循环之后,它输出子字符串的正确的第一个字符,但是它没有正确计数并返回正确的int 我可能设置错误,因为我正在向函数传递一个数组,并且在尝试使用嵌套循环时遇到了很多错误,因此我尝试了一个while循环,它可以编译,但输出不正确 我对指针还是相当陌生,并将它们作为论据传递,因此可能存在问题 什么都行 int findSubstring(char *
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;
}
int findSubstring(char*s,char substring[])
{
int j=1;
char*strprtr=NULL;
while(strprtr==NULL)
{
strprtr=strstrstr(s,子串);
如果(strprtr!=NULL)
打破
j++;
}
你似乎过于复杂的任务,因为你正在使用C++,你应该使用.<
std::string s=“摩天大楼”;
std::size_t pos=s.find(“ysc”);
if(pos!=std::string::npos)
std::cout使用指针算法怎么样
int findSubstring(char *s, char substring[])
{
char* strPtr = strstr(s, substring);
if (strPtr != NULL)
{
return (int)(strPtr - s);
}
else
{
return -1; //no match
}
}
将您的修复为,请参阅:
你使用C++,所以为什么不<代码> STD::String < /C> >?
int findSubstring(const std::string& s, const std::string& substring)
{
std::size_t j =s.find(substring);
return ( j!=std::string::npos) ? j :-1;
}
返回(int)(strPtr-s);你能给我解释一下这一行吗?这段代码也正是我想要的,但我想知道我为什么要用它!字符指针包含字符的地址。取两个字符指针的差值可以告诉你从一个移动到另一个的字符数。因为strPtr
指向其中一个字符在s
中,它将告诉您所使用的字符串中的字符数。将差值转换为整数可确保您的返回类型正确。谢谢,转换部分看起来很明显,但我没有得到指针减法。现在这就有意义了。返回(int)(pos-s);你能解释一下这行代码是如何工作的吗?另外,我对std::(任何东西)的使用完全不熟悉,但我经常看到它,觉得我应该研究一下使用这种语法。
int findSubstring(char *s, char substring[])
{
char* pos = strstr(s, substring);
if(pos)
return (int)(pos - s);
else -1;
}
int findSubstring(const std::string& s, const std::string& substring)
{
std::size_t j =s.find(substring);
return ( j!=std::string::npos) ? j :-1;
}