将数字的std :: string转换为vector <int>时出现问题

时间:2019-05-02 16:22:26

标签: c++ string vector

我应该从控制台屏幕上获得两个大整数(最大600位),然后将结果再次写入控制台。

我定义了两个std :: string类型的变量来存储两个大整数。我从用户那里获取它们的值。为了将这两个数字相加,我定义了两个向量来存储两个数字串的数字。

这是问题所在,当我尝试遍历向量以打印从数字字符串中提取的数字时,会得到以下结果。数字的Ascii值打印在控制台上。 谁能告诉我如何解决此问题。

注意:代码仍不完整。

对于第一个字符串,我从用户那里获取了数字9 8 7 6 5 4 3 2 1,在控制台窗口上,我得到了以下结果。

[0] 57

[1] 56

[2] 55

[3] 54

[4] 53

[5] 52

[6] 51

[7] 50

[8] 49

    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <algorithm>


    std::string Sum_Of_Two_Long_Integers()
    {
      std::string First_String ;
      std::string Second_String ;
      std::string Result_String ;

      std::cout << "Please enter the first number: " ;
      std::getline(std::cin, First_String);
      std::cout << "Please enter the second number: " ;
      std::getline(std::cin, Second_String);

      std::vector <int> First_String_Vector (First_String.length()) ;
      std::vector <int> Second_String_Vector (Second_String.length()) ;

      for(int Counter = 0 ; Counter  < First_String_Vector.size() ; ++ Counter)
      {
         First_String_Vector[Counter] = First_String[Counter] ;
         Second_String_Vector[Counter] = Second_String[Counter] ;
         std::cout << "[" << Counter << "]" << First_String_Vector[Counter] << std::endl ;
      }

      return Result_String ;
   }

   int main()
   {
      std::string Result_String  = Sum_Of_Two_Long_Integers() ;
      std::cout << "Result = " << Result_String << std::endl ;

      return 0 ;
   }

1 个答案:

答案 0 :(得分:0)

First_String_Vector[Counter] = First_String[Counter] ;
Second_String_Vector[Counter] = Second_String[Counter] ;

数字以ASCII形式存储在字符串中,在将其放入向量之前,应将其转换为整数。

这可以解决问题:

First_String_Vector[Counter] = First_String[Counter] - '0';
Second_String_Vector[Counter] = Second_String[Counter] - '0';

在填充矢量之前,我还会添加对有效输入的检查,以确保只读取数字:

if(First_String[Counter] < '0' || First_String[Counter] > '9' ||
   Second_String[Counter] < '0' || Second_String[Counter] > '9')
{
    std::cout << "Invalid input\n";
    return "":// Or better throw an exception
}

编辑'6'不等于6。第一个是字符,其值是字符“ 6”的ASCII,第二个是整数6。

ASCII是一种编码。字符映射到一些数字。值“ 0”为48,“ 1”为49,...,“ 9”为57

更精确地说,C ++不能保证使用ASCII编码(尽管我不知道不使用ASCII编码的实现),但是可以保证'0'...'9'具有连续的整数价值观。因此'6' - '0'将给我们整数6。