0
#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 上阅读了一些问题,这些问题表明 c++ 中的字符串终止不使用'\0'. 我没有找到如何终止字符串。任何人都可以帮忙吗?

4

3 回答 3

4

空终止字符串是您不必处理的事情std::string。首先,每个接受std::string的函数都已经知道长度并且不需要NULL终止。其次,std::string有一个为您c_str()提供NULL- 终止字符串的包装器,因此您不必乱用它。只需将字符串设置为您想要的长度即可resize

于 2013-06-25T10:28:59.177 回答
1

只需通过 设置字符串的大小string::resize,不需要空终止:

a.resize(tail);
于 2013-06-25T10:25:47.903 回答
1

要删除重复项,您可以std::unique 在此处使用函数的描述。它将返回“指向未删除的最后一个元素之后的元素的迭代器”。因此,您可以使用a.resize(i)wherei的返回值来调整字符串的大小std::unique

于 2013-06-25T10:29:30.793 回答