【问题标题】:Swap two strings from parameter list C++交换参数列表 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);,其中string1string2std::string。使用char *(不是字符串,而是指针)的原因是什么?此外,这看起来像 C 而不是 C++。你确定你选择了正确的语言标签吗?
  • 在 C++ 中使用 std::string 让自己免于痛苦、痛苦和折磨的无尽噩梦,即 C 字符串。
  • 你的代码也有未定义的行为,因为它从数组greeting(来自main())复制了100个字符,它指向一个只有六个字符的数组的第一个元素。
  • 这能回答你的问题吗? c++ void function not changing value of string

标签: c++ string swap


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多