永发信息网

C语言中,已知64字节unsigned char数组,找出64字节数组中连续相同的16个字节,有什么好的算法吗?

答案:5  悬赏:30  手机版
解决时间 2021-02-22 21:57
C语言中,已知64字节unsigned char数组,找出64字节数组中连续相同的16个字节,有什么好的算法吗?
最佳答案
给你写了一个,你看看,不懂就追问:
#include
int main()
{
    unsigned char a[64] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
    21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,37,38,39,40,41,42,43,44,45,
    46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64};
    int i = 0;
    int j = 1;
    int k = 0;
    for (i=0; i<63; i++)
    {
        if (a[i] == a[i+1])
        {
            if (0==k)
            {
                k = i;// 记录起始位置
            }
            j++;
            if (16==j)
            {

                printf("从第%d位到第%d位相同,相同的值为:%d
", k+1, i+2, a[i]);                system("pause");
                return 0;
            }
        }
        else
        {
            k=0;
            j=1;
        }
    }

    printf("未找到连续16个相同的字节!
");    system("pause");
   
    return 0;
}


运行结果:

全部回答
将数据类型直接改成string类的然后调用里面的find函数很轻松就解决了,具体操作百度string类中find函数的用法
模式匹配吗?有个KMP算法你可以百度学习下
我的一个算法是一次最多一次遍历数组即可,所以算法时间复杂度为o(n),算法如下:
单次循环遍历数组,在循环中有两下标,前一个下标与后一个下标进行比较,相等,后一下标后指,不等前一下标指向后一下标,后一下标指向下一个下标,继续循环。
代码如下:(注意,百度知道粘贴源码时没有保留我的格式。。。)
//size:the size of array, n: the number of char is the same. you can initial size = 64 and n = 16
int findTheSame(unsigned char* array, int size, int n){
unsigned char pre = array;
unsigned char cur = array+1;
int count = 0;
while(cur != array + size && count < n){
if(*pre != *cur){
pre = cur;
count = 0;
}
else{
count++;
}
cur++;
}
return count < n ? (pre - array) : -1;
}
//a[] = 0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0
//b[] = 1,2,3,4,1,2,3,4,5,6,7,1,1,2,3,1 //count array
#include
#define N 16
int main()
{
unsigned char a[N]={0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0};
int b[N]={1};
int i;
for(i=1;i {
if(a[i]==a[i-1]) b[i]=b[i-1]+1;
else b[i]=1;
}
for(i=0;i printf("\n");
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
联通如何办理异地销号
樟大坑我想知道这个在什么地方
常德中考考648分可以上那些高中学校?
玫莉蔻玫瑰花泥面膜怎样?能不能买?
乐理教案,音及音高
已知体积是1厘米3的水里含有3.35*10 22次方个
怎样去除汞?
胸脊柱 腰脊柱压迫血管能否引起血压高头晕?
客场看球在哪买球票
我是高三应届毕业生,参加单招,正在报名,有
用托盘天平称量某物体的质量,左盘放物体,右
再格代古比这个地址在什么地方,我要处理点事
学校为什么要和社区建立互动关系
比亚迪s6加满冷却液,现实冷却液还是过高怎么
iphone6s和iphone6 plus哪个贵
推荐资讯
前几天我左边部分的牙齿只是时不时的痛,但是
某个体户春节前代理销售某种品牌的酒,已知进
推荐几部像《是美男啊》一样的灰姑娘,男主强
摩托车、汽车的拧油门、踩油门使机车加速的原
长时间用伤贴止痛膏,好不好
长杉里地址在什么地方,想过去办事
这是什么石头 摔不破 表面有铜色
阳光打码中的选择和算术是怎样打的求大神帮助
魔兽世界吧为什么不能讨论此游戏?
宏远大药房在什么地方啊,我要过去处理事情
爱车族洗车美容会所怎么去啊,有知道地址的么
人事档案库房“六防”是什么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?