字符串是什么,字符串序列

  字符串是什么,字符串序列

  如果一个符号的代码不是另一个符号的代码的前缀,则一组符号的编码被称为是可立即解码的。对于这个问题,我们将假设所有的代码都是二进制的,一组代码中没有两个代码是相同的,每个代码至少有一位,不超过十位,每个集合至少有两个代码,不超过八个。

  例子:假设一个字母表有符号{甲,乙,丙,丁}

  下面的代码可以立即解码:

  甲:01乙:10丙:0010丁:0000

  但是这个不是:

  甲:01乙:10丙:010丁:0000(注意A是C的前缀)

  投入

  编写一个程序,接受来自数据文件的一系列记录组作为输入。一个组中的每条记录都包含一组0和1,代表不同符号的二进制代码。每个组后面都有一个包含单个9的分隔符记录;分隔符记录不属于该组。每个组都独立于其他组;一个组中的代码与任何其他组中的代码都不相关(也就是说,每个组都要独立处理)。

  输出

  对于每个组,您的程序应该确定该组中的代码是否可以立即解码,并且应该打印一个输出行,给出组号并说明该组是否可以立即解码。

  样本输入描述了上面的例子。

  样本值输入

  01

  抽样输出

  集合一可立即解码

  集合2不是立即可解码的

  托了好久才又继续刷题,电脑终于买过来了。

  废话不说,看题。

  字符串系列还没刷完,我真是退步了,最近没刷都有点生疏了。

  这题就是判断所给10串里面有没有某个串是另一串的前缀。

  本来思路是截取字符串再对比,不过老是实现不了,字符串这部分有空得复习复习了。

  后来看网上人家用了一个非常方便的办法,就是字符串查找函数,判断一个字符串是否包含在另一个字符串里面,返回第一个字符的地址,然后与其第一个字符地址对比。

  代码大大缩短了。

  代码(未交流):

  #包括输入输出流

  #包括字符串

  使用命名空间标准

  int main()

  int CNT=1;

  while (1)

  char ch[100][100],tmp

  int n=0;

  for(int I=0;CIN ch[I];我)

  if (strcmp(ch[i], 9 ==0)

  打破;

  n;

  bool jd=true

  for(int I=0;我我)

  for(int j=I 1;j j)

  if (strstr(ch[i],ch[j])==ch[i][0] strstr(ch[j],ch[i])==ch[j][0])

  jd=false

  打破;

  如果(法学博士)

  “cout”集" cnt "是可立即解码的“恩德尔

  其他

  “cout”设置“CNT”不是可立即解码的“恩德尔

  返回0;

  }

  超过时间限制。

  测试是没有错误的,但是我检查后发现一个问题就是这程序没有退出点。

  修改后英亩了。

  #包括输入输出流

  #包括字符串

  使用命名空间标准

  int main()

  int CNT=1;

  炭化温度[100];

  而(cin温度)

  if (temp[0]==9 )

  打破;

  char ch[100][100],tmp

  int n=1;

  strcpy(ch[0],temp);

  for(int I=1;CIN ch[I];我)

  if (strcmp(ch[i], 9 ==0)

  打破;

  n;

  bool jd=true

  for(int I=0;我我)

  for(int j=I 1;j j)

  if (strstr(ch[i],ch[j])==ch[i][0] strstr(ch[j],ch[i])==ch[j][0])

  jd=false

  打破;

  如果(法学博士)

  “cout”集" cnt "是可立即解码的“恩德尔

  其他

  “cout”设置“CNT”不是可立即解码的“恩德尔

  memset(temp,0,sizeof(temp));

  返回0;

  }

  各种不容易啊,有空要多刷了,不能停了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: