【问题标题】:get() and peek() help for storing large numbersget() 和 peek() 帮助存储大量数字
【发布时间】:2011-11-16 17:25:04
【问题描述】:

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

我需要做两件事

  1. 忽略前导空格
  2. 在下一个不是 0-9 的字符处停止。 (空格、字母)

这是我所拥有的:

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

Main 正在调用这个:

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

我是一名学生,这是“家庭作业”。因此,与所有家庭作业一样,我得到了我无法访问的不合逻辑的东西。这个是字符串类。这只是工作的一小部分,但它就像我身边的一根刺。

【问题讨论】:

    标签: c++ input cin


    【解决方案1】:

    我会说在调试器中运行它并找出你在哪里弄乱了数组,我猜是调整大小。

    因为你的输入和输出遵循一个模式。

    14445678954333
    111111111111113
    
    1123567888999H
    11111111111119
    

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

    【讨论】:

      【解决方案2】:

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

      那么你只需要从 MyInt 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;
      }
      

      【讨论】:

      • 没有提到,但我确实标记了这个“作业”。因此,与所有家庭作业一样,我得到了我无法访问的不合逻辑的东西。这个是字符串类。我将编辑主要内容。
      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多