C++ 在C+中交换两个字符串+;

C++ 在C+中交换两个字符串+;,c++,string,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。为什么? 错误在哪里?我需要旅馆车。您应该有: void swap(char* &x, char* &y){ char*

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

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。为什么?

错误在哪里?我需要旅馆车。

您应该有:

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

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


编辑:但是问问周围。这一点以前已经得到了回答。

因为您使用char交换char*字符串值。在您的例子中,
chartmp=*x
意味着从x字符串中获取第一个字符,这意味着
tmp=x[0]

所有进一步的处理都在字符串的第一个字符上完成。所以它只交换第一个字符。。。如果要交换整个字符串,请更改函数,如下所示:

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

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

std::swap(a, b);

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

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

因为您只交换每个字符串的第一个
char
。如果你在C++中编程,为什么不使用<代码> STD::String ?我知道,但是我必须创建一个函数。我不能用图书馆你不能用标准图书馆吗?还是不是C++?如果你可以使用STD库,看看或者我认为这是无效的,因为你正在修改字符串文字。这不是一种未定义的行为吗?字符串的类型应该是
char const*
,希望字符串的长度不要超过20个字符。为什么不使用
std::string
?然后它就是两个字符串的交换(s1,s2),
s1
s2
?如果是这种情况,我不会接受您的解决方案,因为我可能希望看到字符串上的循环。否则,如果可以选择(并使用C++),请使用std::string而不是C string。将原型更改为
void swap(char(&a)[20],char(&b)[20])
,以确保正确。请提供
tmp
数据类型