功能调用无法正常工作

Uys*_*des 0 c++ string function-calls

这是我的函数调用,它有一个原型,一切都编译好,除了我没有得到我想要的结果.

string lower_case(string x)
{
    transform(x.begin(), x.end(), x.begin(), ::tolower);

    return x;
}
Run Code Online (Sandbox Code Playgroud)

现在这个简单的函数接受字符串并使其全部小写,我需要在我的代码中执行这么多次,所以不是一直重写这个,我想为它调用函数,但我没有得到它我想要的结果.例如,使用此代码:

int main()
{
 string str = "HELLO WORLD";
 lower_case(str);
cout<< str << endl;

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出仍然是HELLO WORLD而不是hello world,我是否正确地调用了该函数?

Mar*_* A. 5

按值调用函数时,复制对象,因此退出函数时将丢弃结果.

这是正确的做法

#include <iostream>
#include <algorithm>
#include <ctype.h>
using namespace std;

void lower_case(string& x) // No return type needed
{
    std::transform(x.begin(), x.end(), x.begin(), ::tolower);
}

int main()
{
 string str = "HELLO WORLD";
 lower_case(str);

 cout << str;

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/u5WcYA

您可以将引用指针传递给要修改的对象,即传递给字符串对象.

在您的情况下,您可能(可能更好)在函数签名中使用结果值:

#include <iostream>
#include <algorithm>
#include <ctype.h>
using namespace std;

string lower_case(string x) // Return type needed
{
    std::transform(x.begin(), x.end(), x.begin(), ::tolower);

    return x;
}

int main()
{
 string str = "HELLO WORLD";
 cout << lower_case(str);

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/bZaS6l

在后一种方式中,您从对象中复制,对该副本进行操作,然后返回修改后的副本,从而获得正确的结果.