get()和peek()帮助存储大数字

时间:2011-11-16 02:35:17

标签: c++ input cin

我遇到cin.peek()和cin.get()函数问题。总的来说输入总是让我失望。基本上,我试图能够使用>>的重载来插入MyInt对象中的一串数字(可能比int更长,这就是它使用字符的原因)。我编写的MyInt类中有一个名为myNumber的动态char数组。调整大小功能就是这样,将动态数组的大小调整为新的大小。

我需要做两件事

  1. 忽略前导空格
  2. 停止下一个不是0-9的字符。 (空白,字母)
  3. 这就是我所拥有的:

    istream& operator>> (istream& s, MyInt& n)
    // Overload for the input operator                                                                                             
    {
      char c;             // For peeking                                                                                           
      int x;
      MyInt input;        // For storing                                                                                           
      unsigned int counter = 0; // counts # of stored digits                                                                       
    
      while (isspace(s.peek()))
      {
        c = s.get();
      }
    
      while (C2I(s.peek()) != -1)
      {
        x = C2I(s.get());
        input.myNumber[counter] = I2C(x);
        counter++;
        input.Resize(counter);
      }
      cout << "WHAH WHAH WEE WAH\n";
    
      n = input;
    }
    

    主要是这样称呼:

    cout << "Enter first number: ";
    cin >> x;
    cout << "Enter second number: ";
    cin >> y;
    
    cout << "You entered:\n";
    cout << "  x = " << x << '\n';
    cout << "  y = " << y << '\n';
    

    这是我得到的输出:

    Enter first number: 14445678954333
    WHAH WHAH WEE WAH
    Enter second number: 1123567888999H
    WHAH WHAH WEE WAH
    You entered:
      x = 111111111111113
      y = 11111111111119
    

    我是学生,这是'家庭作业'。因为所有的家庭作业,我都被赋予了无法访问的不合逻辑的东西。这一个是字符串类。这是作品的一个很小的部分,但它就像是我身边的刺。

2 个答案:

答案 0 :(得分:1)

为什么不总是使用 std :: string 来读写您的数字?

然后您需要的是从 MyInt &lt; - &gt;转换的的std :: string

class MyInt
{
    vector<int> Integers;
public:
    MyInt( const string& source )
    {
        for ( size_t i = 0; i < source.size(); ++i )
        {
            Integers.push_back( source[i] - '0' );
        }
    }

    MyInt()
    {
    }

};

istream& operator>> (istream& s, MyInt& n)
{
    string input;
    s >> input;
    n = input;
    return s;
}

int main()
{

    MyInt input;
    cout << "Enter first number: ";
    cin >> input;

    return 0;
}

答案 1 :(得分:1)

我想说在调试器中运行它并找出你搞乱数组的地方,我猜想调整大小。

因为您的输入和输出遵循一种模式。

14445678954333
111111111111113

1123567888999H
11111111111119

你太长了,第一个也是最后一个数字匹配。