📜  C函数交换字符串(1)

📅  最后修改于: 2023-12-03 15:14:25.495000             🧑  作者: Mango

C函数交换字符串

在C语言中,可以使用函数来交换两个字符串。在本文中,将介绍三种不同的方法来实现字符串交换。

方法一:使用临时变量

此方法使用一个临时变量来存储第一个字符串的值,并将第二个字符串的值赋给第一个字符串,最后将临时变量的值赋给第二个字符串。

#include <stdio.h>
#include <string.h>

void swap(char *str1, char *str2) {
    char temp[strlen(str1)+1];
    strcpy(temp, str1);
    strcpy(str1, str2);
    strcpy(str2, temp);
}

int main() {
    char str1[] = "Hello";
    char str2[] = "World!";
    printf("Before swap: str1 = %s, str2 = %s\n", str1, str2);
    swap(str1, str2);
    printf("After swap: str1 = %s, str2 = %s\n", str1, str2);
    return 0;
}

这里使用了strcpy函数来复制字符串。注意,为了避免内存泄漏,需要为临时变量分配足够的空间。

方法二:使用指针

此方法通过交换指向两个字符串的指针来实现交换。这种方法比使用临时变量更高效,因为它不需要复制整个字符串。

#include <stdio.h>

void swap(char **str1, char **str2) {
    char *temp = *str1;
    *str1 = *str2;
    *str2 = temp;
}

int main() {
    char *str1 = "Hello";
    char *str2 = "World!";
    printf("Before swap: str1 = %s, str2 = %s\n", str1, str2);
    swap(&str1, &str2);
    printf("After swap: str1 = %s, str2 = %s\n", str1, str2);
    return 0;
}

这里使用了指向指针的指针来交换两个字符串。注意,如果传递给函数的是指向字符串的指针,则只会交换指针本身,而不会交换字符串。

方法三:使用数组下标

此方法使用数组下标来交换两个字符串中的字符。这种方法非常简单,但是对于长字符串来说,效率可能不高。

#include <stdio.h>
#include <string.h>

void swap(char *str1, char *str2) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    char temp[len1+1];
    strcpy(temp, str1);
    for(int i=0; i<=len2; i++) {
        str1[i] = str2[i];
    }
    for(int i=0; i<=len1; i++) {
        str2[i] = temp[i];
    }
}

int main() {
    char str1[] = "Hello";
    char str2[] = "World!";
    printf("Before swap: str1 = %s, str2 = %s\n", str1, str2);
    swap(str1, str2);
    printf("After swap: str1 = %s, str2 = %s\n", str1, str2);
    return 0;
}

这里使用了数组下标来遍历两个字符串中的字符。注意,与方法一类似,需要为临时变量分配足够的空间。

总之,这三种方法都可以用来交换两个字符串。方法二(使用指针)是最高效的方法,而方法三(使用数组下标)是最简单的方法。