栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CAPL脚本,数组的一些查找操作,包括查找某一个值和某一些值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CAPL脚本,数组的一些查找操作,包括查找某一个值和某一些值

系列用的CANoe演示工程我放在了Git上,不定时根据博客更新。

CANoe-Demn

具体路径:CANoe-DemoTestModuleDtcFuncTestNmNode.can


前言
  • 在日常case开发中,我们经常会遇到在数组中查找的相关逻辑,下面博主总结了以下在数组中查找的相关函数。

文章目录
  • 前言
  • 在一个数组中查找某一个值(数组中找值)
  • 在一个数组中查找一些值(数组中找数组)
  • 在一个数组中查找子数组(数组中找子数组)
  • 数组对比
  • 总结


在一个数组中查找某一个值(数组中找值)
  • 函数参数: int SeachValueInArrary(byte target ,byte source[])
  • 演示代码如下,当找到指定值,返回该值在数组中的第一次出现时的索引值,如果找不到会返回 -1

On key 'a'
{
  byte source[10]={1,2,3,4,5,6,7,8,9,10};
  byte target = 5;
  int retVal;
  
  retVal = SeachValueInArrary(target,source);
  write("SeachValueInArrary return value:%d",retVal);
  
}



int SeachValueInArrary(byte target ,byte source[])
{
  
  int i ;
  
  for(i= 0;i
    if(source[i] == target)
    {
      write("Seached value %d in the arrary and the index is %d",target,i);
      return i;
    }
  } 
  return -1 ;
}

测试结果:


在一个数组中查找一些值(数组中找数组)
  • 函数原型:int SeachMultiValueInArrary(byte target[] ,byte source[])
  • 为方便阅读,上面已经贴出来的代码,就不再下面贴出来,全部源码到博客开头的git 链接去下载
  • 如果全部找到,则返回值为0,否则返回值为 -1


On key 'a'
{

  if(1)
  {   // for SeachValueInArrary test
      byte source[10]={1,2,3,4,5,6,7,8,9,10};
      byte target[3] = {2,3,11};
      int retVal;
      
      retVal = SeachMultiValueInArrary(target,source);
      write("SeachMultiValueInArrary return value:%d",retVal);
  }
}



int SeachMultiValueInArrary(byte target[] ,byte source[])
{
  
  int i ;
  int retVal;
  
  for(i= 0;i
    
    retVal = SeachValueInArrary(target[i],source);
    if(retVal == -1)
    {
      write("target[%d] = %d not Seached in the arrary",i,target[i]);
      return -1 ;
    }
  } 
 return 0;
}


测试结果如下图:


在一个数组中查找子数组(数组中找子数组)
  • 函数原型: int SeachMultiValueInArrary(byte target[] ,byte source[])
  • 这个函数和 SeachMultiValueInArrary相同的都是在一个数组中查找另一个数组,但是这个不同的是查找子数组需要关注顺序。
  • 返回找到返回值为 0,否则返回值为 -1
  • 为方便阅读,上面已经贴出来的代码,就不再下面贴出来,全部源码到博客开头的git 链接去下载



On key 'a'
{

  if(1)
  {   // for SeachValueInArrary test
      byte source[10]={1,2,3,4,5,6,7,8,9,10};
      byte target[3] = {2,3,4};
      byte target_Nok[3] = {2,3,5};
      int retVal;
      
      retVal = SeachSubArraryInArrary(target,source);
      write("SeachSubArraryInArrary return value:%d",retVal);
      
      retVal = SeachSubArraryInArrary(target_Nok,source);
      write("SeachSubArraryInArrary return value:%d",retVal);
  }
}



int SeachSubArraryInArrary(byte target[] ,byte source[])
{
  
  int i ,j;
  int retVal;
  byte forcompare[255];
  int tarlen ,sourlen;
  
  tarlen = elCount(target);
  sourlen =  elCount(source);
  if(tarlen >= sourlen )
  {
    write("target arrary length is smaller than source array.");
    return -1;
  }  
  
  for(i= 0;i< sourlen - tarlen +1 ;i++)
  { 
    for(j= 0;j< tarlen ;j++)
    {
      if(source[i+j] != target[j])
      {
        break;
      }
    }
    if(j==tarlen)
    {
      return 0 ; //find it
    }
  } 
 return -1; //not find
}

turn 0;
}

测试结果如下图:

  • 方便对比,测试了正反两种情况


数组对比
  • 函数原型: int CompareTwoArrary(byte target[] ,byte source[])
  • 两数组形同返回值为 0,否则返回值为 -1
  • 为方便阅读,上面已经贴出来的代码,就不再下面贴出来,全部源码到博客开头的git 链接去下载



On key 'a'
{

    if(1)
  {   // for SeachValueInArrary test
      byte source[10]={1,2,3,4,5,6,7,8,9,10};
      byte target[10] = {1,2,3,4,5,6,7,8,9,10};
      int retVal;
      
      retVal = CompareTwoArrary(target,source);
      write("CompareTwoArrary return value:%d",retVal);
  }
}

int CompareTwoArrary(byte target[] ,byte source[])
{
  
  int i ;
  int retVal;
  
  for(i= 0;i
    if(target[i] != source[i])
    {
      return -1 ;
    }
  } 
 return 0;
}

测试结果如下图:


以上演示函数都是基于 BYTE 类型的,如果需要用到其它数据类型,需要重载以上函数。。

总结

谢谢欣赏!

  • 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861618.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号