繁体   English   中英

如何通过函数C ++传递字符串

[英]how to pass a string through a function c++

我只是在学习C ++编程。 在我的作业中,我需要根据提示比较用户给出的三个字符串。 我知道对于要直接修改某些值而不是返回值的函数,我需要使用指针。 我也知道字符串已经像指针一样。 到目前为止,这是我的代码,但我不知道我哪里写错了:

#include"std_lib_facilities.h"

void switching (string x, string y){
        string flag;
        if (x>y){flag=y;
                y=x;
                x=flag;
        }

}

int main(){
        string  s1, s2, s3;
        cout<<"introduce three words: ";
        cin>>s1>>s2>>s3;
                switching(s1,s2);
                cout<<s1<<" "<<s2<<" "<<s3;
                cout<<endl;
                switching(s2,s3);
                cout<<s1<<" "<<s2<<" "<<s3;
                cout<<endl;
                switching(s1,s2);
                cout<<s1<<" "<<s2<<" "<<s3;
                cout<<endl;
        return 0;
}

您的函数按值(副本)而不是按引用(或指针)接收字符串,因此它实际上无法执行您尝试执行的交换。 通过引用接收参数,而不是将原型更改为:

void switching (string& x, string& y){

为了记录起见,当string s包装指向char数组的指针时,它们的行为类似于值,而不是指针。 如果按值接收它们,它们将分配一个新的内存块并将字符串的完整内容复制到其中。 这就是为什么要尽可能使用引用语义的原因。 否则,您将制作许多不必要的副本。 您可能会想到C样式字符串文字和char数组,它们确实会作为指向第一个字符的指针而传递,但这不适用于真正的C ++ std::string

您也可以使用<utility><algorithm> std::swap避免显式的临时flag对象,如果您不在C ++ 11上,但是现在您确实应该在C ++ 11上;编写pre-C ++ 11 C ++在这一点上是不必要的受虐狂):

void switching (string& x, string& y){
    if (x>y) std::swap(x, y);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM