在C中不使用任何数组表示法切换字符串

时间:2015-01-04 18:53:21

标签: c pointers

嗨我对指针有点新意,我正在尝试编写一个函数,可以在不使用任何数组符号的情况下将一个字符串与另一个字符串切换,所以完全使用指针。

我有这个功能,但是在这一个中,我使用了一个数组符号。

有更简单,更好的方法吗?谢谢。

void stringtausch(char *eins, char *zwei) {
    char first[50], *philfe = first, *one = eins, *two = zwei;
    while(*one != '\0') {
        *philfe++ = *one++;
    }
    *philfe = '\0';
    while(*two != '\0') {
        *eins++ = *two++;
    }
    *eins = '\0';
    philfe = first;
    while(*philfe != '\0') {
        *zwei++ = *philfe++;
    }
    *zwei = '\0';
}

2 个答案:

答案 0 :(得分:1)

如果两个字符串的长度相等

void stringtausch(char *eins, char *zwei) {
    while ((*eins != '\0') && (*zwei != '\0')) {
        char swp;
        swp = *zwei;
        *zwei++ = *eins;
        *eins++ = swp;
    }
    *zwei = '\0';
    *eins = '\0';
}

如果它们不存在,除非在传递指针之前分配足够的空间,否则它是不可能的。我没有看到太多的好处,因为你可以

void stringtausch(char **eins, char **zwei) {
    char *swp;

    swp   = *zwei;
    *zwei = *eins;
    *eins = swp;
}

并致电stringtausch

stringtausch(&s1, &s2);

答案 1 :(得分:0)

更简单的方法是使用strcpy,但如果你想按照自己的方式行事,那就容易多了。指针指向数组或单个单元格的第一个单元格地址。你只能这样做:

char * eins = "dogslovecats";
char * zwei = "cats";

stringtausch(&eins, &zwei);

void stringtausch(char ** eins, char ** zwei) {

    char * temp;

    temp = *eins;

    *eins = *zwei;

    *zwei = *temp;
}