我正在尝试从字符串中删除重复项。代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
void removeDup(std::string s, std::string &ex)
{
int hash[256] = {0};
int k = 0;
for (int i = 0; i < s.size(); ++i)
{
if (hash[s[i]] == 0)
{
ex[k++] = s[i];
//std::cout<<ex[k-1];
}
hash[s[i]] = 1;
}
}
int main()
{
std::string s;
std::getline(std::cin, s);
std::string ss;
removeDup(s, ss);
std::cout<<ss<<std::endl;
return 0;
}
现在在main函数中我打印了ss的值(在removeDup函数中作为引用传递)但是它什么都没打印。为什么会这样?字符串元素的值是否在被调用函数中更新?
此外,当我按地址传递字符串时,我只是打印出第一个值。
例如:
void removeDup(std::string s, std::string *ex)
{
// same as above body function body
}
int main()
{
......
removeDup(s, &ss);
std::cout<<ss<<std::endl;
return 0;
}
在输出中,我只得到s中的第一个字母。我无法理解。我对编程语言中的字符串不是很熟悉。请帮助。
答案 0 :(得分:2)
这归结为std::string::operator[](size_t index)
期望index
超过该字符串&#39; s size()
的事实。
这意味着您需要使用constructor (variant 2)初始化ss
,并使用size()
' '
个值hello.cc3:25: fatal error: gstreamermm.h: No such file or directory
来填充它,或者,更好的是,使用push_back()
(理想情况下与reserve()
结合使用,作为将元素附加到输出字符串的方法。