-2
我试图从字符串中删除重复项。该代码是这样:通过引用传递std :: string不会更新调用函数中的字符串值
#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;
}
现在,在主功能我已打印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中的第一个字母。我无法理解。我对编程语言中的字符串不太了解。请帮助。
未定义的行为,就是这样,你可能想要检查你的字符访问 – Rakete1111
你正试图在'ex [k ++] = s [i];''ex'为空时分配字符,你应该将字符插入它 – VTT
@ Rakete1111没有给你,我读了一些东西[在这里](https://stackoverflow.com/questions/10789740/passing-stdstring-by-value-or-reference)然后thoug这样做。 – haunted