Вы должны вернуть std::string
, если это возможно для вашего контекста, или выделить указатель на char*
. Я покажу вам пример для std::string
:
std::string removeDuplicate(char str[], int n)
{
// Used as index in the modified string
int index = 0;
// Traverse through all characters
for (int i=0; i<n; i++) {
// Check if str[i] is present before it
int j;
for (j=0; j<i; j++)
if (str[i] == str[j])
break;
// If not present, then add it to
// result.
if (j == i)
str[index++] = str[i];
}
return std::string(str, str + index);
}
int main()
{
char test[] = "tttsetst";
std::string retStr = removeDuplicate(test, strlen(test)); // value is "tse"
return 0;
}
При возврате мы запускаем std :: string с последним измененным положением для удаления дублированных символов std::string(str, str + index);
Или, если вы вообще не хотите возвращать значение, вы можете пометить ваш str, переданный функции, с '\ 0' в необходимом индексе, чтобы установить новый конец строки, и он сохранит свое значение после выхода из функции. Потому что str [] передается по указателю. Смотри код:
void removeDuplicate(char str[], int n)
{
// Used as index in the modified string
int index = 0;
// Traverse through all characters
for (int i=0; i<n; i++) {
// Check if str[i] is present before it
int j;
for (j=0; j<i; j++)
if (str[i] == str[j])
break;
// If not present, then add it to
// result.
if (j == i)
str[index++] = str[i];
}
//mark end of the string
str[index] = '\0';
}
//...
char test[] = "tttsetst";
removeDuplicate(test, strlen(test)); // test value is "tse" after leaving function
//...
Также это будет дешевле, вам не нужно выделять новые переменные для хранения фиксированных строковых данных.