c++ 字符串反转函数[重复]

ulydmbyx  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(127)
    • 此问题在此处已有答案**:

(18个答案)
3天前关闭。
为什么当我把cout放在函数体中时下面的函数(f)工作,而当我把cout放在函数调用之后时它不工作

#include <iostream>
using namespace std;
void f(string str)
{
    int size=str.size();
    for (int i=0;i<size/2;i++)
    {
        char temp=str[i];
        str[i]=str[size-i-1];
        str[size-i-1]=temp;
    }
}
int main ()
{
    string a="abcd";
    f(a);
    cout<<a;   //output: abcd 
}
#include <iostream>
using namespace std;
void f(string str)
{
    int size=str.size();
    for (int i=0;i<size/2;i++)
    {
        char temp=str[i];
        str[i]=str[size-i-1];
        str[size-i-1]=temp;
    }
    cout<<str;
}
int main ()
{
    string a="abcd";
    f(a);  //output: dcba
}

我是编程新手,所以我不知道指针之类的概念,我猜这就是问题所在。

lrpiutwd

lrpiutwd1#

这是因为变量a没有被函数void f(string str)修改。f获取字符串的副本,然后使用该副本反转字符串。这意味着原始字符串a没有改变。
如果您希望f不进行复制,可以使用&操作符通过引用传递字符串。
void f(string& str)将为astr使用相同的字符串,因为它们将引用存储器中的相同数据。

相关问题