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,我是否正确地调用了该函数?
按值调用函数时,复制对象,因此退出函数时将丢弃结果.
这是正确的做法
#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)
您可以将引用或指针传递给要修改的对象,即传递给字符串对象.
在您的情况下,您可能(可能更好)在函数签名中使用结果值:
#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)
在后一种方式中,您从对象中复制,对该副本进行操作,然后返回修改后的副本,从而获得正确的结果.