Код в условии цикла while
уже увеличивает значение указателя
while ( *p++ )
таким образом, проверка внутри области видимости петель
if ( *p != 'l' )
всегда пропускает 1-й символ.
Самый простой и понятный способ переписать этот цикл - это, вероятно,
char str[] = "Hello World\n";
for (char*p = str; *p; ++p) {
if ( *p != 'l' )
cout << *p;
}
Рабочий Пример в сети .