c++ - 在数学上添加两个字符串?

标签 c++ string int converter

我在论坛上四处寻找,但仍然找不到我的问题的答案。 我有两个字符串,它们实际上是一个数字数组。例如(我只是选择随机数

    string input1="12345678909876543212";
    string input2="12345";

我想将这两个字符串加在一起,但将它们当作整数。 我的目标是创建一个类,我可以在其中添加比 (long long int) 更大的数字,这样它就可以超过最大的 long long int 变量。

所以我毫无问题地反推了字符串,所以现在好了

  input1="21234567890987654321" 
  input2="54321"

然后我尝试添加,比方说 input1[0]+input2[0] (2+5) 到一个新字符串,让我们称它为 newString[0],它等于 (7);但我找不到一种好方法来临时转换字符串中的当前数字,以便我可以将它添加到新字符串中?谁能帮忙。我厌倦了 atoi、stof、stod。他们似乎根本不适合我。 我可以通过任何方式使此功能正常工作。 我还不关心制作类(class),我只关心找到一种方法来以数学方式添加这两个字符串,但仍然保持 newString 的字符串格式。谢谢谁能帮我解决这个问题

最佳答案

好吧,假设你唯一的问题是逻辑,而不是类设计,我想出了这个逻辑

  • 用0填充输入,检查长度,匹配长度
  • 像正常添加一样添加,跟踪进位
  • 最终从结果中删除前导零

所以使用 std::transform 在反向迭代器上使用 lambda 函数:-

char carry = 0;

std::transform(input1.rbegin(),input1.rend(),input2.rbegin(),
              result.rbegin(),[&carry]( char x,  char y){
    char z = (x-'0')+(y-'0') + carry;
    if (z > 9)
    {
        carry = 1;
        z -= 10;
    }
    else
    {
        carry = 0;
    }
    return z + '0';
});

//And finally the last carry
result[0] = carry + '0';

//Remove the leading zero
n = result.find_first_not_of("0");
if (n != string::npos)
{
    result = result.substr(n);
}

参见 Here

编辑 “你能评论一下你在这里做什么吗”

                +--------+--------------+------------+-------> Reverse Iterator
                |        |              |            |
std::transform( | input1.rbegin(), input1.rend(),input2.rbegin(),
               result.rbegin(), [&carry]( char x,  char y){
               //This starts a lambda function
    char z = (x-'0')+(y-'0') + carry; // x,y have ASCII value of each digit
    // Substracr ASCII of 0 i.e. 48 to get the "original" number
    // Add them up
    if (z > 9) //If result greater than 9, you have a carry
    {
        carry = 1; // store carry for proceeding sums
        z -= 10; // Obviously 
    }
    else
    {
        carry = 0; //Else no carry was generated
    }
    return z + '0'; // Now you have "correct" number, make it a char, add 48
});

std::transform出现在 header 中 <algorithm> ,请参阅 ideone 发布的链接。

关于c++ - 在数学上添加两个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262193/

相关文章:

c++ - MFC 对话框中的 QWinWidget 不重新绘制或响应 Tab/箭头键

c++ - 基于第一个单词C++解析文本文件

c++ - 为什么重命名我的变量可以防止段错误?

c++ - 将 char[][] 转换为 char**?

c++ - 最大内存分配?

java - 尽管可变,但从技术上讲,这是否是线程安全的?

java - 如何获取特定范围内的随机数

c++ - 模板仿函数与函数

来自带有未转义引号的动态数据的 JavaScript 字符串声明

linux - 镜像字符串