系列用的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 类型的,如果需要用到其它数据类型,需要重载以上函数。。 总结
谢谢欣赏!
- 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。



