请教mymtom大神一个问题,感谢感谢!这个帖子的17楼例子http://bbs.csdn.net/topics/390302539我的代码如下,
请教mymtom大神一个问题,感谢感谢!
这个帖子的17楼例子
http://bbs.csdn.net/topics/390302539
我的代码如下,我想在调用函数csvsep的时候,传line的指针进去,而不是传line的值本身
这样行不?我不会改,求大神指点,谢谢啊
char line[180];
ReadFile.open("test.txt",ios::in);
ReadFile.getline(line,180);
while(!ReadFile.eof())
{
ReadFile.getline(line,180);
arr = csvsep(line);
for (i = 0; arr[i]; i++)
{printf("arr[%d]=[%s]\n", i, arr[i]);}
free(arr);
}
ReadFile.close();
[最优解释]
可以不用malloc的,但是影响应该不大,楼主可以试试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int csvsep(char *str, char **arr, int siz)
{
char *buf;
char *ptr;
char *end;
int num;
size_t len;
static char strnull[] = "NULL";
static char sep[] = "","";
buf = str;
strcat(buf, sep + 1);
ptr = buf + 1;
num = 0;
while ((end = strstr(ptr, sep)) != NULL) {
*end = '\0';
len = strlen(ptr);
if (len > 0)
arr[num++] = ptr;
else
arr[num++] = strnull;
ptr = end + 3;
if (num >= siz)
break;
}
return num;
}
int main(int argc, char* argv[])
{
char str[1024]
= ""123","ab,cd","GG"GG","你好","100","99987","","PPP"";
int i, n;
char *arr[8];
n = csvsep(str, arr, sizeof(arr)/sizeof(arr[0]));
for (i = 0; i < n; i++)
printf("arr[%d]=[%s]\n", i, arr[i]);
return 0;
}
[其他解释]给你扫一下盲,函数传数组的时候,不是把整个数组穿进去了,而是退化成指针了,所以你甚至在函数中sizeof(数组名)会等于4,其他的懒得说了,你真的要好好看看书了。如果不急,截一部分文件私信发给我把,晚上下班有空帮你写了。急就算了
[其他解释]可以的啊。
line的类型是char *, 没有问题的
[其他解释]多谢啊,我测试了不行的,编译不通过
我是这样想的,如果函数的参数是字符串的指针,是否会执行得快一些?因为毕竟line本身有接近200字节
------其他解决方案--------------------
如果我这样 char *line 就编译报错,我不知道怎么改了
[其他解释]我是这样改的,本来是这样的
char line[160];
我改成 char *line;
编译通过了,但是执行的时候报错:"调试“,”发送错误报告“,”不发送“的弹出窗口
[其他解释]改成 char*line 你得初始化啊,否则 line指向未知的内存
[其他解释]++
[其他解释]谢谢
网上搜了下,说是这样初始化
char *line="A"; 这样编译都通不过了
[其他解释]诶,让大家笑话了。这周末去买书看,各位老师推荐几本好书
[其他解释]楼主例子用
char line[160];
就可以了。
不会影响速度的。
[其他解释]到底应该怎样初始化呢?我这个line 内容最长不超过180字节
谢谢啊
[其他解释]这样传入函数的参数就是实际的line的值了,如果我传入line的地址给函数csvsep不会快一些么?
[其他解释]char*line=(char*)malloc(180);类似这样。其实这样你还不如直接用char line[180];少了释放的环节
[其他解释]多谢,我测试了。结果比较奇怪
char*line=(char*)malloc(180);开机测试3次,读文件调用50万次,
第一次10秒
第二次0.2秒
第三次12秒
char line[160];也测试3次
第一次 0.5秒
第二次 3秒
的三次 1.2秒
我不清楚怎么回事,我想把那个函数再弄快一点,是否函数csvsep里的如下两行会影响性能呢?
让各位老师笑话了。
arr = (char **)malloc(sizeof(char *) * (siz));
arr = (char **)realloc(arr, sizeof(char *) * (siz = siz + siz));
[其他解释]谢谢啊,多次测试结果这种写法略快,大约快 5%
这%5也很牛了!大神!
还有点事想麻烦各位老师
文本行共8个字段,其中要判断第6列,如果含有“你”,“我”,“他”那么直接扔掉这一行
否则
提取文本行的第一个字段作为HASH的KEY,拼接第2个字段和第7个字段成新的字符串作为HASH的VALUE
第2个字段和第7个字段用`分隔,保存到HASH
如果KEY已经存在,那么更新 VALUE=value+新的第1个字段+新的第7个字段
如果不存在,那么INSERT新的KEY,新的VALUE(value+新的第1个字段+新的第7个字段)
也就是如果KEY如果存在,VALUE的值不断拼接上去
最后文本文件读完后,把Hash的所有内容输出到一个新的文本文件
先谢谢了啊,我目前还没能力写出这个程序,刚学了没几天C++
多谢热心的版主和其他大神帮忙