<分区>
这是我的函数调用,它有一个原型(prototype),一切都可以正常编译,只是我没有得到我想要的结果。
string lower_case(string x)
{
transform(x.begin(), x.end(), x.begin(), ::tolower);
return x;
}
现在这个简单的函数获取字符串并将其全部变为小写,我需要在我的代码中多次执行此操作,因此我不想一直重写它,而是想为其调用一个函数,但我没有得到我想要的结果。以这段代码为例:
int main()
{
string str = "HELLO WORLD";
lower_case(str);
cout<< str << endl;
return 0;
}
输出仍然是 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;
}
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;
}
http://ideone.com/bZaS6l
在后一种方法中,您从对象中复制一份,对该拷贝进行操作,然后返回修改后的拷贝,从而获得正确的结果。