c++ - 我的游程编码不适用于大数字
问题描述
我有一个假设是否需要对 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++
解决方案
首先,即使您说不能使用字符串,您仍然需要了解如何将数字字符流转换为整数的基本原理。
假设数字是正数,这里有一个简单的函数,可以将一系列数字转换为一个数字:
#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
循环替换为从文件中读取每个字符即可。
推荐阅读
- signalr - 将 SignalR 聊天应用程序持久保存到数据库
- python - 如何使用 pandas 将 hhmmss.ff 格式转换为日期时间
- mongoose - Mongoose - 查找不在另一个对象列表中的对象
- mongodb - 在 Moongose 中排序后将 $lookup 结果限制为 1 个文档
- javascript - 将包含双引号的字符串从 node.js 脚本传递到 VBScript
- xml - 使用某个节点(Shell 脚本)shell 更新 XML 文件中的文本
- c# - C# Winforms - 不同控件具有相同属性名称的数据绑定
- c++ - 无法从 VRChaperone 访问游戏区
- templates - 使用 ansible 模板但 rysnc 移动文件
- r - 在 sparklyr 中使用 first、last、nth