交换参数列表 C++ 中的两个字符串
Posted
技术标签:
【中文标题】交换参数列表 C++ 中的两个字符串【英文标题】:Swap two strings from parameter list C++ 【发布时间】:2020-09-12 01:11:30 【问题描述】:我正在尝试使用以下方法在 C++ 中交换两个字符串。我将它们作为参数传递,并且在方法本身中它们似乎正确交换。但是,当我在调用 swap 方法后输出字符串时,它们并没有改变。知道为什么吗?非常感谢您的帮助!
void swap(char* stringA, char* stringB)
char temp[100];
for (int i = 0; i < 100; ++i)
temp[i] = stringA[i];
stringA = stringB;
stringB = temp;
int main()
char *greeting = "Hello";
char *dismissal = "Good Bye";
swap(greeting, dismissal);
printf("greeting: %s dismissal: %s\n", greeting, dismissal);
return 0;
输出:
greeting: Hello dismissal: Good Bye
【问题讨论】:
在 C++ 中,只需一个简单的std::swap(string1, string2);
,其中string1
和string2
是std::string
。使用char *
(不是字符串,而是指针)的原因是什么?此外,这看起来像 C
而不是 C++
。你确定你选择了正确的语言标签吗?
在 C++ 中使用 std::string
。 让自己免于痛苦、痛苦和折磨的无尽噩梦,即 C 字符串。
你的代码也有未定义的行为,因为它从数组greeting
(来自main()
)复制了100个字符,它指向一个只有六个字符的数组的第一个元素。
这能回答你的问题吗? c++ void function not changing value of string
【参考方案1】:
您只是在修改 swap
函数中的指针副本。如果要更改调用站点的指针,则需要通过引用传递它们。此外,您将字符串的内容视为包含 100 个元素,但它们不包含,因此当您在这些位置建立索引时会调用未定义的行为。
你可以像这样简单地编写函数:
void swap(char const * &stringA, char const* &stringB)
auto temp = stringA;
stringA = stringB;
stringB = temp;
或者直接使用std::swap
。
此外,从 c++11 开始,您不能将字符串文字分配给 char *
,您需要将其分配给 char const *
。
这是demo。
【讨论】:
以上是关于交换参数列表 C++ 中的两个字符串的主要内容,如果未能解决你的问题,请参考以下文章