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

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL脚本,数组的一些查找操作,包括查找某一个值和某一些值相关的知识,希望对你有一定的参考价值。

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

CANoe-Demn

具体路径:CANoe-Demo\\TestModule\\DtcFuncTest\\NmNode.can


前言

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

文章目录


在一个数组中查找某一个值(数组中找值)

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

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);
  



/***************************************************************************************************
----------------------------------------------------------------------------------------------------                                                                                                 
 Function name:   SeachValueInArrary

在指定数组中查找指定值
----------------------------------------------------------------------------------------------------                                                                                                 
 Parameters:       
----------------------------------------------------------------------------------------------------                                                                                                 
Author:   
  CSDN - MaYiXiaoBing
  https://blog.csdn.net/qq_34414530?type=blog 
 ----------------------------------------------------------------------------------------------------                                                                                                  
Date: 2022/05/01            
----------------------------------------------------------------------------------------------------                                                                                                  
***************************************************************************************************/
int SeachValueInArrary(byte target ,byte source[])

  
  int i ;
  
  for(i= 0;i<elcount(source);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

/*@!Encoding:936*/

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);
  



/***************************************************************************************************
----------------------------------------------------------------------------------------------------                                                                                                 
 Function name:   SeachMultiValueInArrary

在指定数组中查找一些值
----------------------------------------------------------------------------------------------------                                                                                                 
 Parameters:       
----------------------------------------------------------------------------------------------------                                                                                                 
Author:   
  CSDN - MaYiXiaoBing
  https://blog.csdn.net/qq_34414530?type=blog 
 ----------------------------------------------------------------------------------------------------                                                                                                  
Date: 2022/05/01            
----------------------------------------------------------------------------------------------------                                                                                                  
***************************************************************************************************/
int SeachMultiValueInArrary(byte target[] ,byte source[])

  
  int i ;
  int retVal;
  
  for(i= 0;i<elcount(target);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 链接去下载


/*@!Encoding:936*/

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);
  



/***************************************************************************************************
----------------------------------------------------------------------------------------------------                                                                                                 
Function name:   SeachSubArraryInArrary
在指定数组中查找受否有指定的子数组,和SeachMultiValueInArrary函数不同的是,这个要求输入数组的顺序。
----------------------------------------------------------------------------------------------------                                                                                                 
 Parameters:       
----------------------------------------------------------------------------------------------------                                                                                                 
Author:   
  CSDN - MaYiXiaoBing
  https://blog.csdn.net/qq_34414530?type=blog 
 ----------------------------------------------------------------------------------------------------                                                                                                  
Date: 2022/05/01            
----------------------------------------------------------------------------------------------------                                                                                                  
***************************************************************************************************/
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 链接去下载


/*@!Encoding:936*/

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);
  

/***************************************************************************************************
----------------------------------------------------------------------------------------------------                                                                                                 
Function name:   CompareTwoArrary
比较两个输入数组是否相同
----------------------------------------------------------------------------------------------------                                                                                                 
 Parameters:       
----------------------------------------------------------------------------------------------------                                                                                                 
Author:   
  CSDN - MaYiXiaoBing
  https://blog.csdn.net/qq_34414530?type=blog 
 ----------------------------------------------------------------------------------------------------                                                                                                  
Date: 2022/05/01            
----------------------------------------------------------------------------------------------------                                                                                                  
***************************************************************************************************/
int CompareTwoArrary(byte target[] ,byte source[])

  
  int i ;
  int retVal;
  
  for(i= 0;i<elcount(target);i++)
  
    if(target[i] != source[i])
    
      return -1 ;
    
   
 return 0;


测试结果如下图:


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

总结

谢谢欣赏!

  • 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

以上是关于CAPL脚本,数组的一些查找操作,包括查找某一个值和某一些值的主要内容,如果未能解决你的问题,请参考以下文章

JAVA-初步认识-第五章-数组-常见操作-查找&折半查找

PHP查找一列有序数组是否包含某值(二分查找)

c#查找string数组的某一个值的索引

c#查找string数组的某一个值的索引

js在数组中查找是不是存在某一个数值

查找和替换数组中的重复项