CAPL脚本,数组的一些查找操作,包括查找某一个值和某一些值
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL脚本,数组的一些查找操作,包括查找某一个值和某一些值相关的知识,希望对你有一定的参考价值。
系列用的CANoe演示工程我放在了Git上,不定时根据博客更新。
具体路径: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脚本,数组的一些查找操作,包括查找某一个值和某一些值的主要内容,如果未能解决你的问题,请参考以下文章