как завершить строку в переполнении стека

#include<iostream>
#include<memory.h>
#include<string.h>
using namespace std;
int main()
{
string a;
cin>>a;
int len=a.length();
bool hit[256];
memset(hit,0,sizeof(hit));
hit[a[0]]=1;
int tail=1;
for(int i=1;i<len;i++)
{
if(!hit[a[i]])
{
a[tail]=a[i];

++tail;
hit[a[i]]=true;
}
}
a[tail]='\0';
cout<<" "<<a;
}

Эта программа удаляет дубликаты в строках. Например, ввод "aaaa" будет печатать только «а».

Что мне нужно знать, это как завершить строку в C ++! Это не заканчивается '\0', Я прочитал некоторые вопросы о стековерсии, которые указывают, что завершение строки в C ++ не использует '\0', Я не нашел, как завершить строки вместо этого. Кто-нибудь может помочь?

0

Решение

Нуль-завершить строку — это то, что вы не будет приходится иметь дело с std::string, Во-первых, каждая функция, которая принимает std::string уже знает длину и не требует NULL прекращение. Во-вторых, std::string имеет c_str() обертка, которая обеспечивает NULL-конечная строка для вас, так что вам не нужно облажаться с ней. Просто установите строку на желаемую длину resize и это сделано.

4

Другие решения

Просто установите размер строки string::resize, нулевое завершение не требуется:

a.resize(tail);
1

Для удаления дубликатов вы можете использовать std::unique Вот это описание функции. ВернетсяИтератор элемента, который следует за последним не удаленным элементомMsgstr «. Таким образом, вы можете изменить размер вашей строки, используя a.resize(i) где i это возвращаемое значение std::unique,

1
По вопросам рекламы [email protected]