Что это значит str[i]!=(char)NULL?
Этот код "ничего" не значит, так как этот код в общем случае некорректен. Что скрывается за макро NULL в языке C++ - определяется реализацией. Макро NULL в современном C++ может быть определено как nullptr, а значение nullptr не может быть преобразовано к типу char.
Макро NULL предназначено для использования в указательных контекстах. Использование NULL в целочисленных контекстах - практически всегда ошибка, признак некомпетентного и низкокачественного кода. С появлением в языке С++ nullptr и с разрешением определять NULL именно как nullptr использование NULL в целочисленных контекстах в языке С++ фактически запрещено.
Даже до С++11 и nullptr многие компиляторы выдавали диагностические сообщения на использование NULL в целочисленных контекстах.
P.S. При этом стоит иметь в виду, что даже в языке С не гарантируется, что приведение NULL к целочисленному типу дает целочисленное значение 0.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости