C ++ - 重载运算符>>并使用C风格的字符串处理输入

时间:2014-03-26 23:09:31

标签: c++ dynamic-arrays c-strings

我正在进行一项任务,我们必须创建一个“MyInt”类,它可以处理比常规int更大的数字。我们只需要处理非负数。我需要为这个类重载>>运算符,但我很难做到这一点。

我不允许#include <string>

有办法:

一个。接受输入为C风格的字符串
湾通过它解析并检查空格和非数字(即如果提示是cin&gt;&gt; x&gt;&gt; y&gt;&gt; ch,并且用户输入1000 934H,接受该输入为两个MyInts和然后是一个char)。

我认为它与peek()get()有关,但我无法弄清楚它们的来源。

我宁愿不知道完全怎么做!请指出我正确的方向。

这是我的构造函数,因此您可以了解该类的内容(我还有const char *的转换构造函数。

MyInt::MyInt (int n)
{
   maxsize = 1;

   for (int i = n; i > 9; i /= 10) {
      // Divides the number by 10 to find the number of times it is divisible; that is the length
      maxsize++;
   }

   intstring = new int[maxsize];

   for (int j = (maxsize - 1); j >= 0; j--) {
      // Copies the integer into an integer array by use of the modulus operator
       intstring[j] = n % 10;
       n = n / 10;
   }
}

谢谢!对不起,如果这个问题含糊不清,我还是新手。如果我能提供更多信息以便让问题更清楚,请告诉我。

1 个答案:

答案 0 :(得分:2)

所以你基本上想要的是解析const char*以检索其中的整数,并忽略所有空格(+其他?)字符。

请记住,'1''M'或甚至' '等字符只是整数,映射到ASCII表。因此,您可以轻松地将字符从其符号人类可读('a')转换为其在内存中的值。在C / C ++中有很多关于ascii table和chars的资源,所以我会让你找到它,但你应该明白这个想法。在C / C ++中,字符是数字(类型为char)。

有了这个,你就会知道你可以对它们进行操作,比如添加或比较。

处理C字符串时的最后一件事:它们以空值终止,这意味着字符'\0'就位于它们最后使用的字符之后。