Этот код удаляет повторяющиеся буквы из строки, как я могу сохранить это возвращаемое значение в переменной и выполнять с ним операции?
char *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 str;
}
И std::string
, и std::vector<char>
в целом работают очень хорошо для данных строкового типа на основе char
. В этом конкретном случае std::set<char>
может быть вариантом.
Вы изменяете содержимое входного массива str
. Очевидно, у вас есть эта переменная в вызывающей функции. Вы можете просто использовать это.
Скажем, вы используете:
char title[] = "mission impossible";
removeDuplicate(title, strlen(title));
Вы можете использовать title
после звонка на removeDuplicate
. Он будет обновлен после вызова функции.
Вы должны вернуть 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 с последним измененным pos, чтобы удалить повторяющиеся символы 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
//...
Кроме того, это будет дешевле, вам не нужно выделять новые переменные для хранения фиксированных строковых данных.
Можете ли вы более конкретно рассказать о том, что вы пытаетесь сделать?