【问题标题】:Exchange two c-strings交换两个 c 字符串
【发布时间】:2015-02-15 21:30:37
【问题描述】:

我正在尝试交换两个 cstrings 的值,但我不断收到错误。起初我尝试使用 for 循环来单独交换每个数组中每个元素的值,但现在我尝试使用 strcpy() 函数。我不知道我做错了什么。非常感谢任何帮助!

#include <iostream>
using namespace std;
void exchange(char * &, char * &);
int main()
{
    char * s1 = "Hello";
    char * s2 = "Bye Bye";

    exchange(* & s1, * & s2);

    cout << "s1 = " << s1 << endl; //"Bye Bye" should be displayed
    cout << "s2 = " << s2 << endl; // "Hello" should be displayed
    return 0;
}
void exchange(char * & p1, char * & p2)
{
    int size;
    if (strlen(*& p2) > strlen(*& p1))
    {
        size = strlen(*& p2);
    }
    else
    {
        size = strlen(*& p1);
    }

    char * temp;
    temp = new char[size];

    strcpy(*&temp, *&p1);
    strcpy(*&p1, *&p2);
    strcpy(*&p2, *&temp);
}

【问题讨论】:

标签: c++


【解决方案1】:

你需要像std::swap这样的解决方案:

std::swap(s1, s2);

输出将是:

s1 = Bye Bye
s2 = Hello

【讨论】:

    【解决方案2】:

    我想通了,我所要做的,而不是函数交换中的一切,把:

    char * temp;
    temp = new char[];
    
    temp = p1;
    p1 = p2;
    p2 = temp;
    

    【讨论】:

    • 现在谁清理分配给temp的内存?为什么不使用std::swap(p1, p2)
    • 这里没有理由分配一个新数组。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多