c++ - 函数调用无法正常工作

标签 c++ string function-calls

<分区>

这是我的函数调用,它有一个原型(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

在后一种方法中,您从对象中复制一份,对该拷贝进行操作,然后返回修改后的拷贝,从而获得正确的结果。

关于c++ - 函数调用无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959541/

相关文章:

c++ - 无法从具有相同类型的两个来源之一创建 std::string

ruby-on-rails - 字符串是.空白?但既不为空也不为空白

c++ - 字符串比较的快速方法

programming-languages - 按返回类型重载函数?

c - 初学者关于C程序函数调用栈、序列点(sequencing)的疑问

C++11 std::conditional 在运行时?

c++ - 是否可以将 0 存储为整数变量中的第一个数字

python - 如何在不使用 shell 的情况下打印生成器对象?

c++ - boost::iostream bzip2_decompressor 不解压缩由 bzip2_compressor 压缩的文件

c++ - 为什么使用 Visual Studio 和命令行编译时大小不同