-2

私は2つの大きな数を複数持つ次のC++プログラムを持っています:

#include <iostream>
#include <string>    
#define OVERFLOW 2
#define ROW b_len
#define COL a_len+b_len+OVERFLOW

using namespace std;

int getCarry(int num) {
    int carry = 0;
    if(num>=10) {
        while(num!=0) {
            carry = num %10;
            num = num/10;
        }
    }
    else carry = 0;
    return carry;
}

int num(char a) {
    return int(a)-48;
}

string mult(string a, string b) {
        string ret;
        int a_len = a.length();
        int b_len = b.length();
        int mat[ROW][COL];
        for(int i =0; i<ROW; ++i) {
            for(int j=0; j<COL; ++j) {
                mat[i][j] = 0;

            }
        }

        int carry=0, n,x=a_len-1,y=b_len-1;
        for(int i=0; i<ROW; ++i) {
            x=a_len-1;
            carry = 0;
            for(int j=(COL-1)-i; j>=0; --j) {
                if((x>=0)&&(y>=0))  {
                    n = (num(a[x])*num(b[y]))+carry;
                    mat[i][j] = n%10;
                    carry = getCarry(n);
                }
                else if((x>=-1)&&(y>=-1)) mat[i][j] = carry;
                x=x-1;
            }
            y=y-1;
        }

        carry = 0;
        int sum_arr[COL];
        for(int i =0; i<COL; ++i) sum_arr[i] = 0;
        for(int i=0; i<ROW; ++i) {
            for(int j=COL-1; j>=0; --j) {
                sum_arr[j] += (mat[i][j]);
            }
        }
        int temp;
        for(int i=COL-1; i>=0; --i) {
            sum_arr[i] += carry;
            temp = sum_arr[i];
            sum_arr[i] = sum_arr[i]%10;
            carry = getCarry(temp);
        }

        for(int i=0; i<COL; ++i) {
            ret.push_back(char(sum_arr[i]+48));
        }

        while(ret[0]=='0'){
            ret = ret.substr(1,ret.length()-1);
        }
        return ret;
}

void printhuge(string a) {
    cout<<"\n";
    for(string::iterator i = a.begin(); i!=a.end(); ++i) {
        cout<<*i;
    }
}

int main() {
    string a,b;
    cin>>a>>b;
    printhuge(mult(a,b));
    return 0;
}

すべて正常に動作していますが、「string」の代わりにchar[]を使用する必要があります。私はそれがばかげていることを知っていますが、私は必要なそのフォーマットを使わなければなりません。では、char []定義で動作するようにコードを変換するにはどうすればよいですか?

どんなアイデアでも大歓迎です、ありがとう:)

4

2 に答える 2

4

C文字列(char配列)を変更する必要がない場合、つまり、const char[]またはの場合は、次のメソッドをconst char *使用します。c_str()std::string

const char *c_string = str.c_str();

編集:あなたの問題はあなたがまったく使用すべきではないということですstd::string。この場合、C++文字列をC文字列に置き換える方法は次のとおりです。

  • C文字列は、char(またはconst char)の0で終了する配列です。通常のように、特定の条件では、それらはポインターに減衰します。
  • strlen()の関数を使用して、C文字列の長さを取得できます<string.h>
  • 文字列を相互に追加するには、strcat()またはstrncat()関数を使用します。バッファサイズと終了NUL文字用の余分なスペースに注意してください!
于 2013-01-28T18:03:28.950 に答える
2

std::string::c_str()文字列オブジェクトを呼び出します。

バッファが関数によって変更されていないことを確認してください。

編集

または、を受け入れる必要がある場合はchar[]、それから作成するだけstringです。

于 2013-01-28T18:03:25.720 に答える