字符串处理之HDLC串处理

本文介绍了一种针对HDLC协议处理过的01序列进行逆向解析的方法,旨在还原原始的01序列。通过统计和识别特定模式,该算法能够准确地移除因连续五个1而额外添加的0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寻找变化前01序列

问题描述
给你一个01序列,HDLC协议处理的话,如果出现连续的5个1会补1个0。例如1111110,会变成11111010。
现在给你一个经过HDLC处理后的01序列,你需要找到HDLC处理之前的01序列。
例如给你11111010
你需要输出1111110


Input
输入正整数N,表示N例测试。接着输入N组数据,每组输入经过HDLC处理过的01序列(长度小于100)。
Output
对每组输入数据,输出HDLC处理前的01序列。

Sample Input
2
11111010
1111100
Sample Output
1111110
111110

思路:
    北邮的一个复试上机题,实质上就是去除字符串中的某个特定字符,大体思路是统计1出现的次数,当1连续出现5次时,下一个字符就不再输出,并将统计变量cnt置0。在统计过程中,中间一旦出现不是1的字符,统计变量cnt也置为0。

AC代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 105 
using namespace std;
char str[maxn];
int main() {
    
    int m;//测试样例的数量 
    scanf("%d",&m);
    while(m--){
    	scanf("%s",str);
    	int cnt = 0;
    	for(int i=0;i<strlen(str);i++)
    	{
    		
    		if(str[i] == '1')
    			{
    				printf("%c",str[i]);
    				cnt++;
    				if(cnt==5)
    				{
    					i++;
    					cnt = 0;
    				}
    			}
    		else
    		 {
    		 	printf("%c",str[i]);
    		 	cnt=0;
    		 }
    	} 
    	
    	printf("\n");
    	
    	
    }
    return 0;
    
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值