2017-09-03 23 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

回答

相關問題