You want to know the value of i in s[i] == 'w', right? That value is simply the (pointer) arithmetic difference between a pointer to s[i] (that is, the address of s[i]) and a pointer to s[0]. Since you have both, you can say that s[p - s] == 'w'.
You might want to guarantee that p is not NULL (or that the substring will be found) before you write something like that, though, otherwise you'll get an out of bounds access.
I figured the concept out. My problem is that I have a function with a return value that has to be an integer, I was concerned about an error since s, sub and p are all char values and not integers. ( the notorious MyString class...)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
//assume this is a function of MyClass for illustration purposes
int MyClass::Find(const s1 & substr)
{
constchar* p = strstr(s1, substr);
return p -s1; //this is the important part
}
//assume we are switching to main() for illustration purposes
char s[] = "Hello, world!";
char sub[] = "world";
int myIndex;
myIndex = MyClass finder.Find(s,sub); //I am hoping this will return a value of 7
would my index indeed be an int even though s and sub are chars?
I am not asking how to make it work, I am asking will it return an integer or will I have to go another route to do so.
also if it does return an integer why, what is the exception rule?
I hope that was a bit clearer. On a brighter note, that was a stellar example you gave.
It allowed me to alter it without giving you my homework, so I could still do that myself.
You see, s, sub and p in your code (the method parameter list is screwed up) are not chars. They're of type char* (const char* in p's case, but let's abstract that away for now). They're all pointers. Pointers hold addresses, and addresses are integral numbers.
And technically, p - s is of type ptrdiff_t, so that's what your function should return.
On a brighter note, that was a stellar example you gave.
It allowed me to alter it without giving you my homework, so I could still do that myself.
just looked up ptrdiff_t "This is a signed integral type, and as such can be casted to compatible fundamental data types." As lame as it is for me to say it: wahoo!
Thanks for all the help there, and the good explanation. I appreciate it filipe, hopefully one day I will be good enough to give advice with as much integral knowledge of the language.