免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9525 | 回复: 9
打印 上一主题 下一主题

C的 空字符串 难道不是 用 " " 表示? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-31 08:35 |只看该作者 |倒序浏览
本帖最后由 free4machine 于 2010-05-31 08:36 编辑

我想对 一个 文件 逐词 读,再做对比, 比如我有以下文件,

cat /tmp/tlf.txt
   85    77    17    74    82    26    14

想和
  33    22   11   55   82  22  10

对比, 看下有多少 相同的,   也就是 彩票 中奖对比。


程序:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void)
  4. {
  5. char *buf;
  6. char *token;
  7. int c;
  8. char *space=" ";
  9. char str2[1024];

  10. char *file="/tmp/tlf.txt";
  11. FILE *fp;

  12. if (( fp = fopen(file,"r")) == NULL) {
  13.         perror("fopen:");
  14. }

  15. fgets(str2,1024,fp);

  16. printf("str is: %s\n",str2);

  17. buf = str2;


  18. while((token = strsep(&buf, " ")) != NULL){

  19.         if(strcmp(token,space)){
  20.                 c++;
  21.                 printf("%s\n", token);
  22.         }
  23. }  

  24. printf("total : %d\n",c);
  25. return 0;
  26. }
复制代码
输出:
  1. str is:    85    77    17    74    82    26    14



  2. 85



  3. 77



  4. 17



  5. 74



  6. 82



  7. 26



  8. 14

  9. total : 29
复制代码
奇怪了, 不是才 7 个数, 怎么 是 29 个了?

我尝试 把
  1.    printf("%s\n", token);
复制代码
改成
  1.    printf("%s|", token);
复制代码
, 输出:
  1. str is:    85    77    17    74    82    26    14
  2. |||85||||77||||17||||74||||82||||26||||14||total : 29
复制代码
我就更看不懂了, 难道不应该是这个吗?  :
  1. |85|77|17|74|82|26|14|
复制代码

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
2 [报告]
发表于 2010-05-31 08:43 |只看该作者
" "指的是空格。也是一个字符。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
3 [报告]
发表于 2010-05-31 08:53 |只看该作者
另外,strsep没见过这个函数啊,不是标准库里面的吧。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
4 [报告]
发表于 2010-05-31 09:14 |只看该作者
  1. # if(strcmp(token,space)){
  2. #                 c++;
  3. #                 printf("%s\n", token);
  4. #         }
复制代码
这个也有问题,应该是
  1. strcmp(token, space) == 0
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-05-31 10:16 |只看该作者
谢谢楼上的 处女贴。

改成 你说的这样   strcmp(token, space) == 0  也不好使 {:3_201:}

论坛徽章:
0
6 [报告]
发表于 2010-05-31 10:25 |只看该作者
用 strlen 就搞定了。 哈哈。

论坛徽章:
0
7 [报告]
发表于 2010-05-31 15:11 |只看该作者
文件中的一行内容之间的字符不是一个空格而是4个

论坛徽章:
0
8 [报告]
发表于 2010-05-31 15:58 |只看该作者
在hp和aix没找到strsep

在linux上找到了
你的空格是4个

论坛徽章:
0
9 [报告]
发表于 2010-05-31 17:17 |只看该作者
很明显,空格也算字符的

论坛徽章:
0
10 [报告]
发表于 2010-05-31 22:27 |只看该作者
空格必须算字符阿~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP