2017-09-03 10 views
-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中的第一个字母。我无法理解。我对编程语言中的字符串不太了解。请帮助。

+1

未定义的行为,就是这样,你可能想要检查你的字符访问 – Rakete1111

+0

你正试图在'ex [k ++] = s [i];''ex'为空时分配字符,你应该将字符插入它 – VTT

+0

@ Rakete1111没有给你,我读了一些东西[在这里](https://stackoverflow.com/questions/10789740/passing-stdstring-by-value-or-reference)然后thoug这样做。 – haunted

回答

相关问题