0

我无法通过引用传递我的字符串,不在这里我使用 char 二维,我可以使用字符串,但我想用 char 数组来做,在 swap1 函数中交换字符串,在 swap 2 函数交换整数发生。字符串交换不起作用。谢谢你的帮助 。任何学习这一点的好链接将不胜感激。

void func(int *x,char (*y)[500]);
void swap2(int &x, int &y);
 void swap1(char *a,char *b);
 int main(void){
    char str[4][500];
    int a[4];
    int i,j;
    for(i=0;i<4;i++){       
        cin>>a[i];
        cin>>str[i] ;
    }
    for(i=0;i<4;i++){
        for(j=3;j>0;j--){
            if(a[j]<a[j-1]){
                swap2(a[j],a[j-1]);
                swap1(str[j],str[j-1]);
            }
        }
    }
    return 0;
}

void swap1(char *a,char *b){
    char *temp = a;
    b = a;
    a = temp;
}
void swap2(int &x, int &y){
    int temp = x;
    x = y;
    y = temp;
}
4

1 回答 1

4

您不会像整数交换那样编写指针交换。在你的整数交换中,你正确地使用了引用,但你没有为你的字符指针。缺少的&结果导致swap1, 因为str[j]str[j-1]将在调用完成后保留其原始值。

void swap1(char *&a,char *&b);
//...
void swap1(char *&a,char *&b){
    char *temp = a;
    b = a;
    a = temp;
}

但是,str不是指针数组,而是数组数组。为了使您的代码正常工作,您应该更改str为指针数组。

char *str[4] = { new char[500], new char[500], new char[500], new char[500] };
//...
delete[] str[0];
delete[] str[1];
delete[] str[2];
delete[] str[3];

但这很麻烦,如果你只是改变你的代码来std::string代替,你会为自己省去很多麻烦。然后你可以使用该swap方法。

void swap1(std::string &a, std::string &b);
//...
std::string str[4];
//...
void swap1(std::string &a, std::string &b) {
    a.swap(b);
}
于 2012-06-30T16:38:44.773 回答