这实际上只是我在算法和数据结构中的原始作业的一小部分。在某些时候,我应该编写一个函数来交换字符串数组中的两个元素。
我们必须使用的原型是:
void swap(char *a, char *b);
对我而言,将双指针传递给此函数更有意义(如果交换字符串)。事实上,我不知道如何在不使用双指针的情况下使他们的原型工作。我错过了什么或者这是错的吗?
我前段时间对此进行过研究,这里有很多已回答的问题,我只是想知道设计此作业的人是否犯了错误。
答案 0 :(得分:3)
您可以通过创建一个长度等于两个字符串之一的临时char
数组并使用strcpy()
来交换两个字符串。
当然,您需要确保交换不会溢出两个字符串/数组中的一个。以下是一个示例示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char *a, char *b)
{
char *tmp = malloc(strlen(a) + 1);
strcpy(tmp, a);
strcpy(a, b);
strcpy(b, tmp);
free(tmp);
}
int main(void)
{
char str_a[50] = "Hello world";
char str_b[50] = "What's up";
swap(str_a, str_b);
puts(str_a);
puts(str_b);
return 0;
}
另一种方法是使用带有单个char
变量的循环,从而避免动态内存分配:
void swap(char *a, char *b)
{
char tmp;
while (*a && *b)
{
tmp = *a;
*a++ = *b;
*b++ = tmp;
}
if (!*a)
{
size_t n = 0;
while (b[n])
{
*a++ = b[n++];
}
}
else if (!*b)
{
size_t n = 0;
while (a[n])
{
*b++ = a[n++];
}
}
*a = '\0';
*b = '\0';
}