как завершить строку в с++

#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" будет напечатано только «a».

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


person user2416871    schedule 25.06.2013    source источник


Ответы (3)


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

person Puppy    schedule 25.06.2013

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

a.resize(tail);
person Juraj Blaho    schedule 25.06.2013

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

person Alexandru Barbarosie    schedule 25.06.2013