首页 > 解决方案 > 我的游程编码不适用于大数字

问题描述

我有一个假设是否需要对 txt 文件进行编码和解码,例如:你好,你好吗?必须编码为 hel2o 你好吗?和 aaaaaaaaaajkle 作为 a10jkle。

while ( ! invoer.eof ( ) ) {
        if (kar >= '0' && kar <= '9') {
            counter = kar-48;
            while (counter > 1){
                uitvoer.put(vorigeKar);
                counter--;
            }

        }else if (kar == '/'){
            kar = invoer.get();
            uitvoer.put(kar);
        }else{
            uitvoer.put(kar);
        }
            vorigeKar = kar;

        kar = invoer.get ( );
    }

但我遇到的问题是如果需要解码 a12bhr,答案是 aaaaaaaaaaaabhr 但我似乎无法毫无问题地获得 12 作为数字,我也不能使用任何字符串或数组。

C++

标签: c++

解决方案


首先,即使您说不能使用字符串,您仍然需要了解如何将数字字符流转换为整数的基本原理。

假设数字是正数,这里有一个简单的函数,可以将一系列数字转换为一个数字:

#include <iostream>
#include <cctype>

int runningTotal(char ch, int lastNum)
{
  return lastNum * 10 + (ch -'0');
}

int main()
{
   // As a test
   char s[] = "a123b23cd1/";
   
   int totalNumber = 0;
   for (size_t i = 0; s[i] != '/'; ++i)
   {
      char digit = s[i];  // This is the character "read from the file"
      if ( isdigit( digit) )
          totalNumber = runningTotal(digit, totalNumber);
       else
       {
          if ( totalNumber > 0 )
              std::cout << totalNumber << "\n";
          totalNumber = 0;
       }
   }
   std::cout << totalNumber;
}

输出:

123
23
1

那么做了什么?字符数组是“文件”。然后我循环每个字符,建立数字。这runningTotal是一个从遇到的每个数字字符构建整数的函数。当找到一个非数字时,我们输出该数字并再次从 0 开始总计。

代码不会将这封信保存为“乘”——我把它留给你作为家庭作业。但是上面的代码说明了如何获取数字并从中创建数字。对于使用文件,您只需将for循环替换为从文件中读取每个字符即可。


推荐阅读