Если объявление функции выглядит следующим образом
char* removeDuplicates(string &s,int n);
, то это означает, что сам переданный объект будет изменен в функции. В противном случае параметр должен иметь квалификатор const.
Также неясно, почему функция имеет тип возврата char *
. Похоже, что объявление функции противоречиво.
Второй параметр функции должен иметь как минимум тип size_t
или лучше std::string::size_type
. Тип int не может вместить все значения типа std :: string :: size_type.
Функция может быть объявлена без второго параметра.
Простой подход без использования промежуточных контейнеров, для которого требуются промежуточные контейнеры. Dynami c выделение памяти может выглядеть следующим образом
#include <iostream>
#include <string>
std::string & removeDuplicate( std::string &s )
{
const char *p = s.c_str();
std::string::size_type pos = 0;
for ( std::string::size_type i = 0, n = s.size(); i < n; i++ )
{
std::string::size_type j = 0;
while ( j < pos && s[i] != s[j] ) j++;
if ( j == pos )
{
if ( i != pos ) s[pos] = s[i];
++pos;
}
}
return s.erase( pos );
}
int main()
{
std::string s( "H e l l o" );
std::cout << "\"" << s <<"\"\n";
std::cout << "\"" << removeDuplicate( s ) <<"\"\n";
return 0;
}
Вывод программы:
"H e l l o"
"H elo"