LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1537|回复: 14

c语言字符串处理问题求教!

[复制链接]
发表于 2005-4-14 09:30:32 | 显示全部楼层 |阅读模式
一个由‘;’分隔符组成的串,如何把他们依次分开,并将各个子串的指针存储到一个字符指针数组中去,例如:
源串为1;2;3;4;5;
要求分割后存储到一个数组中s[0]="1";s[1]="2";s[2]="3"。
注意,开始并不知道源串中分隔符的个数,要求程序的效率尽可能高,不要采用先用一个循环求出分隔符的个数,然后再用一个循环来依次赋值的方法。
发表于 2005-4-14 12:02:40 | 显示全部楼层
一次遍历就够了,不需要第二次循环。
自己分析也可以,想省事点就用strtok。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-14 12:20:33 | 显示全部楼层
斑竹能否给出简单的代码示例
回复 支持 反对

使用道具 举报

发表于 2005-4-14 12:45:04 | 显示全部楼层
man strsep
回复 支持 反对

使用道具 举报

发表于 2005-4-14 12:43:50 | 显示全部楼层
man strsep
回复 支持 反对

使用道具 举报

发表于 2005-4-14 12:46:04 | 显示全部楼层
man strsep

----

static int check_bin_file(const char* file)
{
    char* z, *p;
    const char bin_files[] = "release note.txt|make.bat|t2phase.bat|built32mbit.bat|hex2fls.exe";

    z = strdup(bin_files);

    while( (p = strsep(&z, "|"))){
        if(p == '\0'){
            return -1;
        }else{
            if(strcmp(p, file) == 0)
                return 0;
            else
                return -1;
        }
    }

    free(z);

    return -1;
}
回复 支持 反对

使用道具 举报

发表于 2005-4-14 12:50:23 | 显示全部楼层
就是strcmp嘛,了解strcmp的实现code就知道怎么写啦,很easy的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-14 14:03:03 | 显示全部楼层
看来大家还是没弄懂我的意思。我需要把各个子串存储到一个字符串数组中。这个问题的困难在于无法事先知道该数组的长度,下面是我的代码:

  1. static void test(unsigned char * sou)
  2. {
  3. unsigned char * buf;
  4. unsigned char* ucdes[50];

  5. buf=strdup(sou);
  6. ucdes[0]=strtok(buf,FGF);
  7. while(ucdes[++i]=strtok(NULL,FGF));

  8. return;
  9. }
复制代码

这段代码的问题就在于unsigned char* ucdes[50] ,事先无法知道ucdes数组该分配多长,只能通过一次循环来确定分隔符的个数,进而确定数组的长度,然后第二次循环对数组赋值。
回复 支持 反对

使用道具 举报

发表于 2005-4-14 16:38:04 | 显示全部楼层
用指针啊,不需要长度的,*p != '\0'; p++,不断的走啊!
回复 支持 反对

使用道具 举报

发表于 2005-4-16 14:01:59 | 显示全部楼层
这个用c++很简单,c就麻烦
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表