用C ++交换两个字符串

时间:2015-01-08 15:03:19

标签: c++ string

我必须交换两个字符串。这是我的代码:

void swap(char *x, char *y) {
    char tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;
}

char a[20] = "car";
char b[20] = "hotel";

swap(a, b);

该程序返回har - cotel。为什么呢?

错误在哪里?我需要酒店 - 车。

4 个答案:

答案 0 :(得分:8)

在C ++ 11中,只需调用std::swap

std::swap(a, b);

Live example

答案 1 :(得分:1)

你应该:

void swap(char* &x, char* &y){
    char* tmp = x
    x=y
    y = tmp.
}

on swap。

tmp,x和y是指针。它们内部有一个地址,指向内存中的某个位置。你想在它们上交换地址。

编辑:但问问周围。这已经得到了回答。

答案 2 :(得分:1)

这是一个简单的解决方案:

void swap(char a[], char b[])
{
   char tmp[20];
   strcpy(tmp, a);
   strcpy(a, b);
   strcpy(b, tmp);
}

答案 3 :(得分:-1)

因为您使用char来交换char *字符串值。在您的情况下,char tmp = *x表示从x字符串中获取第一个字符,表示tmp = x[0]

所有进一步处理都在字符串的第一个字符处完成。所以它只交换第一个char ...如果你想交换整个字符串然后改变函数如下:

 char* tmp = x;
 x = y;
 y = tmp;