这意味着什么,RLE的C程序

时间:2014-03-26 23:18:52

标签: c++

我是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;
    }

3 个答案:

答案 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,以确保你知道:

如果您只有00 s,您会如何代表10,对吧?您可能还会将1表示为1。然后是2?好吧,如果可以,你会写2,但你不能......所以你写10代替。

这与您在基数10中从9前进到10时所执行的操作完全类似。您无法在单个数字内写入10,因此您最后将最后一位数字重置为为零,并将下一个数字加1。从19前进到20时,您尝试将9增加1,但您不能,因为基数中没有10的单个数字表示10,所以你宁愿重置那个数字,然后增加下一个数字。

这就是您使用01 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}}。