[英]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.