4817|14

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

【C标准库里那些好玩的题目】strlen那个题目的清晰说明 + 偶滴一种实现 [复制链接]

 
本帖最后由 辛昕 于 2017-9-27 11:43 编辑

上一个贴,大家都反映没看懂。
我看了一下那个b数组,也是给它搞死。遂,出一个完整的题目和说明

一个char型数组,去掉里面所有的 0x00字节。
例如
原数组
0x32,0x01,0x00,0x32,0x33,0x00,0x00,0x32,0x64,0x02,0x00,0x32,0x00

期望得到的结果是
0x32,0x01,0x32,0x33,0x32,0x64,0x02,0x32

此帖出自编程基础论坛

最新回复

心服口服!  详情 回复 发表于 2017-9-27 12:23
点赞 关注
个人签名

强者为尊,弱者,死无葬身之地

 

回复
举报

6040

帖子

204

TA的资源

版主

沙发
 
还有一点要说明,是在原数组上修改,还是得到另外一个新的数组?
此帖出自编程基础论坛
 
 
 

回复

6040

帖子

204

TA的资源

版主

板凳
 
说实话,我非常喜欢教主出的一些小题目。。。
  1. #include <stdio.h>

  2. int filter(unsigned char* a, int len) {
  3.     unsigned char *p =a, *q = a, *e = a+len;
  4.     while(q != e && ((*q && (*p++ = *q++)) || q++));
  5.     return p-a;
  6. }

  7. int main(int argc, const char * argv[]) {
  8.     unsigned char a[] = {0x32,0x01,0x00,0x32,0x33,0x00,0x00,0x32,0x64,0x02,0x00,0x32,0x00};
  9.     int n = filter(a, sizeof(a));
  10.     for(int i=0; i<n; i++) {
  11.         printf("%2x ", a[i]);
  12.     }
  13.     return 0;
  14. }
复制代码

此帖出自编程基础论坛
 
 
 

回复

6423

帖子

16

TA的资源

版主

4
 
lcofjp 发表于 2017-9-25 18:05
说实话,我非常喜欢教主出的一些小题目。。。
[code]#include

int filter(unsigned cha ...

队长牛逼
此帖出自编程基础论坛
 
个人签名training
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

5
 
lcofjp 发表于 2017-9-25 18:05
说实话,我非常喜欢教主出的一些小题目。。。
[code]#include

int filter(unsigned cha ...

while里那条件很酷炫。虽然看20s没看懂.........
貌似这是最基本的一种方法

好,继续............

等待下一个答案
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

6
 
lcofjp 发表于 2017-9-25 18:05
说实话,我非常喜欢教主出的一些小题目。。。
[code]#include

int filter(unsigned cha ...

够骚~
此帖出自编程基础论坛
 
个人签名HELLO_WATER
 
 

回复

116

帖子

0

TA的资源

版主

7
 
我来捣个乱,哈哈,python
import numpy as np
a = np.array([0x32,0x01,0x00,0x32,0x33,0x00,0x00,0x32,0x64,0x02,0x00,0x32,0x00])
b = a[a!=0]
嘿嘿,淫荡吧
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

8
 
风过琴弦 发表于 2017-9-26 22:06
我来捣个乱,哈哈,python
import numpy as np
a = np.array([0x32,0x01,0x00,0x32,0x33,0x00,0x00,0x32, ...

看不懂的路过.............
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

366

帖子

1

TA的资源

一粒金砂(高级)

9
 
风过琴弦 发表于 2017-9-26 22:06
我来捣个乱,哈哈,python
import numpy as np
a = np.array([0x32,0x01,0x00,0x32,0x33,0x00,0x00,0x32, ...

life is short
此帖出自编程基础论坛
 
 
 

回复

6040

帖子

204

TA的资源

版主

10
 
风过琴弦 发表于 2017-9-26 22:06
我来捣个乱,哈哈,python
import numpy as np
a = np.array([0x32,0x01,0x00,0x32,0x33,0x00,0x00,0x32, ...

你用numpy感觉有点杀鸡用牛刀了,用原生数组的过滤功能感觉更简单易懂,当然用numpy显得更高大上,不过用python本身就是坦克大炮了,直接用浏览器的控制台窗口这种小米+步枪的方式也是可以的:

用惯了高级语言,再去用C语言真的想吐,高级语言代码至少一行顶10行C代码,而且不用考虑各种没有意义且容易出错的细节问题,能更快的解决实际问题,化代码为生产力。C和C++真正的噩梦是内存管理,只不过搞单片机很少接触这东西,所以没感觉到C语言真正的痛点
此帖出自编程基础论坛
 
 
 

回复

116

帖子

0

TA的资源

版主

11
 
lcofjp 发表于 2017-9-27 01:55
你用numpy感觉有点杀鸡用牛刀了,用原生数组的过滤功能感觉更简单易懂,当然用numpy显得更高大上,不过用 ...

你这个我也看不懂。。。浏览器内置的,是js的解释器?
此帖出自编程基础论坛
 
 
 

回复

6040

帖子

204

TA的资源

版主

12
 
风过琴弦 发表于 2017-9-27 09:09
你这个我也看不懂。。。浏览器内置的,是js的解释器?

嗯,javascript控制台
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

13
 
  1. #include <stdio.h>
  2. #include <string.h>

  3. // TODO:这个实现,对于出现连续几个0的情况无法解决
  4. void rid_zero_strlen_way(char *src,char *dest)
  5. {
  6.         char *p;
  7.         size_t len;
  8.        
  9.         p = src;

  10.        while(p != NULL)
  11.         {
  12.                 len = strlen(p);
  13.                   
  14.                                    printf("len:%ld\n",len);
  15.         
  16.                 if(len != 0)
  17.                 {
  18.                         memcpy(dest,p,len);
  19.                         dest += len;
  20.                         p += len + 1;
  21.                 }
  22.                 else
  23.                          break;
  24.         }
  25. }

  26. int main(void)
  27. {
  28.            char src[13] = {0x32,0x00,0x51,0x74,0x00,0x12,0x4a,0x00,0x1a,0x43,0x00,0x32};
  29.     char dest[32];   //32长度是随意的;
  30.         int i;

  31.         for(i = 0;i < 13;i++)
  32.                         printf("0x%02x\t\t",src[i]);
  33.                
  34.     rid_zero_strlen_way(src,dest);
  35.    
  36.         for(i = 0;i < strlen(dest);i++)
  37.                         printf("0x%02x\t\t",dest[i]);

  38. }
复制代码
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

6040

帖子

204

TA的资源

版主

14
 
辛昕 发表于 2017-9-27 11:41
[code]#include
#include

// TODO:这个实现,对于出现连续几个0的情况无法解决
void  ...

心服口服!
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

15
 

服啥,这其实是个很弱鸡的东西
就是觉得好玩
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表