我是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 :(得分:2)
它将'0'
的字符编码值添加到recurring_count
中的值。如果我们假设ASCII编码字符,那意味着添加48.
这是从0..9范围内的整数值制作“可读”数字的常见做法 - 换句话说,将单个数字转换为字符形式的实际数字表示。只要所有数字都是“按顺序”(只有0到9之间的数字),它适用于任何编码,而不仅仅是ASCII - 因此使用EBCDIC编码的计算机仍然具有相同的效果。
答案 1 :(得分:0)
recurring_count + '0'
是将int recurring_count
值转换为ascii字符的简单方法。
正如你可以看到wikipedia the ascii character code的0是48.将值添加到该值会转到该值的相应字符代码。
答案 2 :(得分:0)
你看,计算机可能并不真正了解字母,数字,符号;比如字母a
,数字1
或符号?
。他们所知道的只是零和一个。是真是假。存在与否。
这里有一点:1
这是另一个:0
这两个只是有点可以存在或不存在的东西。
然而,计算机可以知道,5
。怎么样?好吧,5
仅在基数10中为5
;在基数4中,它将是11
,在基数2中,它将是101
。你不必知道基础4,但让我们检查基础2,以确保你知道:
如果您只有0
和0
s,您会如何代表1
? 0
,对吧?您可能还会将1
表示为1
。然后是2
?好吧,如果可以,你会写2
,但你不能......所以你写10
代替。
这与您在基数10中从9
前进到10
时所执行的操作完全类似。您无法在单个数字内写入10
,因此您最后将最后一位数字重置为为零,并将下一个数字加1。从19
前进到20
时,您尝试将9
增加1,但您不能,因为基数中没有10
的单个数字表示10,所以你宁愿重置那个数字,然后增加下一个数字。
这就是您使用0
和1
s代表数字的方式。
既然你有数字,你会如何表示字母和符号以及字符数字,例如愚蠢的字符串L4M3
中的4和3?你可以映射它们;例如,映射它们,从那时开始的数字1
代表字符A
,然后2
代表B
。
当然,这会有点问题;因为当您这样做时,数字1
将代表数字1
和字符A
。这正是你写的原因......
printf( "%d %c", 65, 65 );
如果您所使用的环境使用ASCII编码,您将获得输出"65 A"
,因为在解释为字符时,ASCII 65
已被映射为表示A
。可以在there上找到完整列表。
'A'
会传达这样的信息:“嘿,此A
这里的A
是接收65
的代表整数值”,在大多数环境中将只是'0'
。与48
相同,使用ASCII编码计算为{{1}}。