-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