交换字符串值不适用于函数 - C ++

时间:2013-09-25 18:11:26

标签: c++

当我在Main Function中使用它时,

swap(string1,string2)将轻松交换两个字符串值,但如果我在另一个函数中使用它并从main函数调用它将无法工作!

这有效:

int main()
{
    string name1="A",name2="B";
    swap(name1,name2);
}

但这个没有:

string name1="A",name2="B"; // Global Here
void exchange (string one,string two)
{
    swap(one,two);
}

int main()
{
   exchange(name1,name2);
}

问题出在哪里?

3 个答案:

答案 0 :(得分:6)

传递字符串by reference而不是按值,否则exchange将修改onetwo的本地副本。

string name1="A", name2="B"; // Global Here

void exchange(string& one, string& two)
{
    swap(one,two);
}

int main()
{
    cout << name1 << "\n" << name2 << endl;
    exchange(name1, name2);
    cout << name1 << "\n" << name2 << endl;
}

<强>输出:

A
B
B
A

答案 1 :(得分:2)

嗯,实际副本 onetwo的值已被交换。当然,它不会影响变量name1name2。假设您希望交换这些字符串的值,则应通过引用传递参数

void exchange(string& one, string& two) {
    ...
}

答案 2 :(得分:2)

void exchange (string& one,string& two)
{
    swap(one,two);
}

这应该有效。 amperstand(&amp;)表示您通过引用传递参数,并且允许该函数修改作为参数传递的初始字符串。如果你不使用&amp ;,字符串将按值传递,你只会修改实际字符串的副本。