0

文字列を参照で渡すことができません。ここでは char 2-dimension を使用しています。string を使用することもできましたが、char array で実行したいと考えています。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

整数スワップのようにポインタスワップを書いていません。整数スワップでは、参照を正しく使用していますが、文字ポインターは使用していません。とは呼び出しが終了した後も元の値を保持するため、この欠落&は の操作を行わないことになります。swap1str[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 に答える