OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2313|回复: 11

C语言问题求助!!!路过的看下辣

[复制链接]

9

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-11-19
在线时间
21 小时
发表于 2018-12-8 15:45:42 | 显示全部楼层 |阅读模式
15金钱
现在我想完成一个函数:将一串数据传入函数中,定义一个数组,如果该数据不存在数组中,则将其加进数组,如果数组中有这个数据,则跳过。
传入的数据是 u8*str形式的

类似于这样:

定义一个数组---->
void DataCompare(u8*str)
{
      判断传进来的数据是否在数组中,如果在的话就跳过,如果不在数组中则添加进数组中
}

这个判断的要用到算法吗???

最佳答案

查看完整内容[请看2#楼]

首先, 全局变量数组不可能定义为无限大, 这是要占内存的, 超出硬件范围就无法编译通过或生成代码. 再者,你说的这种情况很简单,根本不需要多大的数组空间, 以1个字节为单位比较, 最多只有256种可能的数值, 所以定义一个大小为256字节的数组就行了. 在这种情况下,即使轮询比较,最大循环次数也就255次而已, 所以根本不需要设计特别的算法. 况且, 一旦256个元素占满后, 再来数据都不用轮询, 肯定已经存在在数组了.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-12-8 15:45:43 | 显示全部楼层
ZDawn 发表于 2018-12-10 17:58
我也有疑问,假如有一个全局变量数组,数组大小可以为无限大,初始化时数组各元素均为0,且已经写入 ...

首先, 全局变量数组不可能定义为无限大, 这是要占内存的, 超出硬件范围就无法编译通过或生成代码.
再者,你说的这种情况很简单,根本不需要多大的数组空间, 以1个字节为单位比较, 最多只有256种可能的数值, 所以定义一个大小为256字节的数组就行了.  在这种情况下,即使轮询比较,最大循环次数也就255次而已, 所以根本不需要设计特别的算法.   况且, 一旦256个元素占满后, 再来数据都不用轮询, 肯定已经存在在数组了.
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
发表于 2018-12-8 16:17:57 | 显示全部楼层
本帖最后由 ZDawn 于 2018-12-8 16:20 编辑

传少量数据的话,我感觉一个一个去循环判断也没差多少。
但是传大量数据的话就得看情况了。
回复

使用道具 举报

9

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-11-19
在线时间
21 小时
 楼主| 发表于 2018-12-8 16:54:41 | 显示全部楼层
ZDawn 发表于 2018-12-8 16:17
传少量数据的话,我感觉一个一个去循环判断也没差多少。
但是传大量数据的话就得看情况了。

我也是这样想的,要用算法的话,我是不知道怎么写了。。算法不是很懂
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-6-30
在线时间
9 小时
发表于 2018-12-8 20:38:49 | 显示全部楼层
unsigned int a[]={1,2};

void DataCompare(u8 *str )
{

    for()
}
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-6-30
在线时间
9 小时
发表于 2018-12-8 20:40:12 | 显示全部楼层

unsigned int a[]={1,2};

void DataCompare(u8 *str )
{
    int i;


    for(i=0;i=<2;i++)
   {

   }
}
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-6-30
在线时间
9 小时
发表于 2018-12-8 20:43:44 | 显示全部楼层
本帖最后由 1084036180 于 2018-12-8 20:44 编辑


unsigned int a[]={1,2};

void DataCompare(u8 *str )
{
    int i,s=0;


    for(i=0;i=<2;i++)
   {

if(a=*str)
s++;
str++;

   }

if(s==2)
则不传入数组;
else
则传入数组;

}

笔记本,不好输入。理解了我的意思,就能写出来
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-12-8 21:28:36 | 显示全部楼层
用字符串查找函数 strstr , if(strstr("你的字符串数组",str_1_固定的字符串)!=NULL)就说明该字符串中有 ,如果不成立,就把其加入数组中去
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-12-8 21:54:00 | 显示全部楼层
你定义的数组呢?
是一个全局变量数组吗?
如果是的话,定义多大呢?
如果超出定义的体积怎么办?
这些你先要想清楚。

还有,
你传入的数据长度是可变的吗?
如果是多字节的,
是连续多字节相同才是相同,还是不要求连续多字节相同,
这些你都没有说清楚,
谁是你肚子里的蛔虫??
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
发表于 2018-12-10 17:58:38 | 显示全部楼层
warship 发表于 2018-12-8 21:54
你定义的数组呢?
是一个全局变量数组吗?
如果是的话,定义多大呢?

    我也有疑问,假如有一个全局变量数组,数组大小可以为无限大,初始化时数组各元素均为0,且已经写入内容的位置不可再更改,每次传入1个字节。如果该字节数据不存在数组中,则将其加进数组,如果数组中有这个数据,则不写入数组。
    这个能不能用算法快速判断?或者至少比一个一个轮询的快
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-12-11 09:58:45 | 显示全部楼层
首先我觉得LZ算法两个字都没理解清楚
猪猪熊呢?
回复

使用道具 举报

9

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-11-19
在线时间
21 小时
 楼主| 发表于 2018-12-11 16:51:38 | 显示全部楼层
warship 发表于 2018-12-10 19:19
首先, 全局变量数组不可能定义为无限大, 这是要占内存的, 超出硬件范围就无法编译通过或生成代码.
再者, ...

行吧,老哥,看到你们的回复我很感激,因为这样才知道自己有很多不足的地方。谢谢大家的帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 14:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表