这是什么意思,为RLE编写的C程序
what does that mean, C programm for RLE
我是C的新手,所以我不明白这一行发生了什么:
out[counter++] = recurring_count + '0';
+'0'
是什么意思?
另外,你能帮我为大部分代码写注释吗?我不太懂,所以希望你能帮助我。谢谢你。
#include "stdafx.h"
#include "stdafx.h"
#include<iostream>
void encode(char mass[], char* out, int size)
{
int counter = 0;
int recurring_count = 0;
for (int i = 0; i < size - 1; i++)
{
if (mass[i] != mass[i + 1])
{
recurring_count++;
out[counter++] = mass[i];
out[counter++] = recurring_count + '0';
recurring_count = 0;
}
else
{
recurring_count++;
}
}
}
int main()
{
char data[] = "yyyyyyttttt";
int size = sizeof(data) / sizeof(data[0]);
char * out = new char[size + 1]();
encode(data, out, size);
std::cout << out;
delete[] out;
std::cin.get();
return 0;
}
将'0'
的字符编码值添加到recurring_count
的值中。如果我们假设ASCII编码字符,这意味着加48。
从范围0..的整数值中生成一个"可读"的数字是常见的做法。换句话说,将单个数字转换为字符形式的实际数字表示。只要所有数字都是"按顺序"的(只有0到9之间的数字),它就适用于任何编码,而不仅仅是ASCII -因此使用EBCDIC编码的计算机仍然具有相同的效果。
recurring_count + '0'
是一种将int recurring_count
值转换为ascii字符的简单方法。
你可以在维基百科上看到0的ascii字符码是48。将该值添加到该值的相应字符代码中。
你看,计算机可能并不真正认识字母、数字、符号;比如字母a
,数字1
,或者符号?
。他们只知道0和1。不管是不是真的。存在与否
这里有一个位:1
这里还有一个:0
位只能是存在或不存在这两种情况。
但是计算机可以知道,比如说,5
。如何?5
只在10进制下是5
;以4为底时,它是11
,以2为底时,它是101
。你不需要知道以4为基数,但我们来看看以2为基数的,以确保你知道它:
如果你只有0
s和1
s,你将如何表示0
?0
,对吧?您可能还会将1
表示为1
。那么2
呢?嗯,如果可以的话,你会写2
,但是你不能……所以你写成10
。
这与你在以10为基数从9
前进到10
时所做的完全类似。您不能将10
写入单个数字中,因此您可以将最后一位数字重置为零,并将下一位数字增加1。同样的,当从19
到20
时,你试图将9
增加1,但你不能,因为10
在10进制中没有个位数表示,所以你更愿意重置该数字,并增加下一个数字。
这就是用0
s和1
s来表示数字的方法。
现在你有了数字,你将如何表示字母、符号和字符数字,比如愚蠢的字符串L4M3
中的4和3 ?你可以把它们映射出来;对它们进行映射,例如,从那时起,数字1
将代表字符A
,然后2
将代表字符B
。
当然,这会有点问题;因为当你这样做的时候,数字1
将同时代表数字1
和字符A
。这就是为什么如果你写……
printf( "%d %c", 65, 65 );
您将得到输出"65 A"
,前提是您所在的环境使用ASCII编码,因为在ASCII中,65
在被解释为字符时被映射为表示A
。完整的列表可以在上找到。
简而言之
带单引号的'A'
传递的信息是,"嘿,这里的A
将接收A
的代表性整数值",在大多数环境中,它将只是65
。'0'
也是一样,它的计算结果为48
,使用ASCII编码。
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 这是什么意思,为RLE编写的C程序