Почему это показывает, что две строки идентичны?
Поскольку
template <class T>
bool cmp(T *x,T *y)
{
if(*x == *y)
{
return true;
}else
return false;
}
проверяет только значение first , указанное x
и y
.
Поэтому при проверке
char aChars[5] = "haha", bChars[5] = "hahb";
cout << cmp(aChars, bChars)<< endl;//
убедитесь, что h
равно h
.
Если вы хотите проверить равенство между строками(и если вы хотите избежать использования старого доброго std::strcmp()
), вы должны проверять все символов до первого нуля.
Но это верно для C-строки старого стиля;Я не думаю, что это хорошая идея, чтобы разработать функцию, которая проверяет равенство между указателями для универсального типа T
.
- EDIT -
Не могли бы вы наставить меня, пожалуйста
Чтобы привести пример ... я не думаю, что в простом C много времени, но что-то следующее должно работать
bool cmp (char const * p1, char const * p2)
{
for ( ; *p1 && *p1 == *p2 ; ++p1, ++p2 )
;
return *p1 == *p2;
}
Не по теме: вы пишете код как
bool cmp(T *x,T *y)
{
if(*x==*y)
{ return true;}else
return false;
}
Это эквивалентно
bool cmp(T *x,T *y)
{ return *x == *y; }
В более общем смысле ... если у вас есть код типа
if ( someTest )
return true;
else
return false;
и функция, возвращающая bool
(или someTest
типа bool
), вы можете написать (и, ИМХО, более читабельно и элегантно) просто написать
return someTest;