функция возвращает указатель на первый символ ch в строке, что возвращать если символ не найден?
Есть функция которая ищет символ в строке и возвращает указатель на символ. что делать если символ не найден?
/* возвращает указатель на первый символ ch в строке*/
template <class T = char>
const T* custom_strchr(const T* str, T ch) noexcept /* 'requires' --> C++20 */
requires(std::is_same_v<T, char> || std::is_same_v<T, wchar_t>)
{
const T *p = str;
while(*p && *p != ch)p++;
return p;
}
Также есть функция которая возвращает адрес подстроки, аналогичный вопрос?
/* возвращает указатель на начало подстроки */
template <class T = char>
const T* custom_strstr(const T* str, const T* sub_s)
requires(std::is_same_v<T, char> || std::is_same_v<T, wchar_t>)
{
bool key = false;
const T* p = str;
while(!key && *p)
{ size_t i = 0;
while(*(sub_s + i) && (*(p + i) == *(sub_s + i)))i++;
if (!*(sub_s + i))
key = true;
else
p++;
}
return p;
Ответы (1 шт):
Автор решения: Вячеслав
→ Ссылка
Сделал так для custom_strchr как я понял вроде правильно так:
/* возвращает указатель на первый символ ch в строке*/
template <class T = char>
const T* custom_strchr(const T* str, T ch) noexcept /* 'requires' --> C++20 */
requires(std::is_same_v<T, char> || std::is_same_v<T, wchar_t>)
{
const T *p = str;
while(*p && *p != ch)p++;
return (*p) ? p : nullptr;
}