首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问mymtom大神一个有关问题,感谢感谢

2012-12-23 
请教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的类型是char *, 没有问题的

多谢啊,我测试了不行的,编译不通过
我是这样想的,如果函数的参数是字符串的指针,是否会执行得快一些?因为毕竟line本身有接近200字节
------其他解决方案--------------------


如果我这样 char *line 就编译报错,我不知道怎么改了
[其他解释]
我是这样改的,本来是这样的
char line[160];
我改成 char *line;
编译通过了,但是执行的时候报错:"调试“,”发送错误报告“,”不发送“的弹出窗口

[其他解释]

引用:
我是这样改的,本来是这样的
char line[160];
我改成 char *line;
编译通过了,但是执行的时候报错:"调试“,”发送错误报告“,”不发送“的弹出窗口

改成 char*line 你得初始化啊,否则 line指向未知的内存
[其他解释]
引用:
引用:我是这样改的,本来是这样的
char line[160];
我改成 char *line;
编译通过了,但是执行的时候报错:"调试“,”发送错误报告“,”不发送“的弹出窗口
改成 char*line 你得初始化啊,否则 line指向未知的内存

++
[其他解释]
引用:
引用:
我是这样改的,本来是这样的
char line[160];
我改成 char *line;
编译通过了,但是执行的时候报错:"调试“,”发送错误报告“,”不发送“的弹出窗口
改成 char*line 你得初始化啊,否则 line指向未知的内存

谢谢
网上搜了下,说是这样初始化
char *line="A"; 这样编译都通不过了
[其他解释]
诶,让大家笑话了。这周末去买书看,各位老师推荐几本好书
[其他解释]
楼主例子用
char line[160];

就可以了。
不会影响速度的。
[其他解释]
到底应该怎样初始化呢?我这个line 内容最长不超过180字节
谢谢啊
[其他解释]
引用:
楼主例子用
char line[160];

就可以了。
不会影响速度的。

这样传入函数的参数就是实际的line的值了,如果我传入line的地址给函数csvsep不会快一些么?

[其他解释]
char*line=(char*)malloc(180);类似这样。其实这样你还不如直接用char line[180];少了释放的环节
[其他解释]
引用:
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));

[其他解释]
引用:
可以不用malloc的,但是影响应该不大,楼主可以试试


C/C++ code
?



1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

#include <stdio.h> #include <stdlib.h> #include <st……

谢谢啊,多次测试结果这种写法略快,大约快 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++
多谢热心的版主和其他大神帮忙

热点排行