#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'
, Я не нашел, как завершить строки вместо этого. Кто-нибудь может помочь?
Нуль-завершить строку — это то, что вы не будет приходится иметь дело с std::string
, Во-первых, каждая функция, которая принимает std::string
уже знает длину и не требует NULL
прекращение. Во-вторых, std::string
имеет c_str()
обертка, которая обеспечивает NULL
-конечная строка для вас, так что вам не нужно облажаться с ней. Просто установите строку на желаемую длину resize
и это сделано.
Просто установите размер строки string::resize
, нулевое завершение не требуется:
a.resize(tail);
Для удаления дубликатов вы можете использовать std::unique
Вот это описание функции. ВернетсяИтератор элемента, который следует за последним не удаленным элементомMsgstr «. Таким образом, вы можете изменить размер вашей строки, используя a.resize(i)
где i
это возвращаемое значение std::unique
,