Проблема алгоритмическая: каждый элемент равен самому себе, что преждевременно завершит ваш цикл k. Кроме того, вы увеличиваете только, когда элемент повторяется.
Я предлагаю вам изменить циклы, чтобы не сравнивать каждый элемент с любыми другими элементами, но только с элементами, с ранее обработанными элементами:
for(int l = 0; l<N; l++)
{
int k = 0;
while(k<l && data[l] != data[k]) // only previous items
{
k++;
}
if(k==l) // if no identical, we can add this one
{
cout<<l<<" "<<data[l]<<endl;
counter += 1;
}
}
Не связано: массивы переменной длины недопустимы в C ++, даже если некоторые основные компиляторы принимают это. Я бы предложил использовать вектор для эмуляции этой функции: vector<string> data(N);
Демоверсия