-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;
}

一切正常,但我需要使用 char[] 而不是 "string" 。我知道这很愚蠢,但我必须使用必要的格式。那么-如何将代码转换为使用 char[] 定义?

任何想法都非常感谢,谢谢:)

4

2 回答 2

4

如果你不需要修改 C 字符串(char 数组),即它可以是const char[]or 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()orstrncat()函数。注意缓冲区大小和终止 NUL 字符的额外空间!
  • 等等
于 2013-01-28T18:03:28.950 回答
2

调用std::string::c_str()你的字符串对象。

只要确保缓冲区没有被函数修改。

编辑

或者,如果您需要接受 a char[],只需创建 a string

于 2013-01-28T18:03:25.720 回答