免费注册 查看新帖 |

Chinaunix

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

[C] 用字符串分割字符串的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-19 15:21 |只看该作者 |倒序浏览
5可用积分
大家好,现在想实现用字符串分割字符串的功能,一时间无从下手,请各位高们帮定一下忙,例如字符串的内容为

2009-09-23[tw]06:59:59[tw]113.107.72.210[tw]GET /explorer.asp?action=column&p=i&id=74&eid=4[tw]-[tw]211.137.180.233[tw]-[tw]-[tw]200[tw]0[tw]937 我想按照[tw]进行分割,分了以后存放在数组里面,请各们高手出招!

最佳答案

查看完整内容

最近 也 在写这方面的程序 。

论坛徽章:
0
2 [报告]
发表于 2009-10-19 15:21 |只看该作者
最近 也 在写这方面的程序 。
#include <stdio.h>
#include <string.h>

#define MAX_LINE 1024

int main(void) {
&nbsp;&nbsp;&nbsp;&nbsp;char buf[MAX_LINE]; /* 缓冲区 */
&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp;
&nbsp;&nbsp;&nbsp;&nbsp;//读取文件,如果无法找到文件则退出该程序

&nbsp;&nbsp;&nbsp;&nbsp;if ((fp = fopen("/var/www/app/hlp9/2009-10-14-09.log", "r")) == NULL) { /* 打开文件 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror("fail to read");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//exit(1);

&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;int lines;
&nbsp;&nbsp;&nbsp;&nbsp;char *a[100][5];
&nbsp;&nbsp;&nbsp;&nbsp;for (lines=0;fgets(buf, MAX_LINE, fp) != NULL;lines++) { /* 每次读入一行 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//len = strlen(buf);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 输出所读到的字符画串,并将字符个数输出 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//buf[len - 1] = '\0'; /* 去掉换行符,这样其他的字符串函数就可以处理了 */

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf("%s \n", buf); /* 使用printf函数输出 */

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//a[lines++][0]=buf;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const char * split = "[tw]";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char * p;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = strtok(buf, split);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int y = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (p != NULL) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[lines][y] = p;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n %d", p,y);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = strtok(NULL, split);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
//printf("%d",lines);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i, j;
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < lines; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (j = 0; j < 5; j++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s-", a[i][j]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}

论坛徽章:
0
3 [报告]
发表于 2009-10-19 15:31 |只看该作者
strtok

论坛徽章:
0
4 [报告]
发表于 2009-10-19 16:38 |只看该作者

回复 #3 ryanwei 的帖子

太感谢你了,分全给你

论坛徽章:
0
5 [报告]
发表于 2009-10-19 16:40 |只看该作者
怎么给分啊,我晕,这chinaunix做得不行哦!

论坛徽章:
0
6 [报告]
发表于 2009-10-19 16:57 |只看该作者
好像有些bug啊,老大,遇到asp?action中的t的时候会分开,但是应该不是这样的啊!

论坛徽章:
0
7 [报告]
发表于 2009-10-19 17:53 |只看该作者
推荐用sscanf
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP