免费注册 查看新帖 |

Chinaunix

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

[C] 有关字符串的分割 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-26 21:54 |只看该作者 |倒序浏览
比如一个字符串123 456 798
函数将其分割,最后获得三个整数: 123,456,798。

char *sSplit[10][10];
void StrSplit(char* str){

    int i,len,j,k;
    char temp[4];
    k=0,j=0;
    len=strlen(str);
    for(i=0;i<=len;i++){
    if(strcmp(str,' ')){/*以空格为例*/
    fprintf(stdout,"%c\n",str);
    temp[j]=str;
    j=j+1;
    k=k+1;
    }
    else{
    j=0;
    i=i+1;
    sSplit[0][k-1]=temp;
    }
    }
}

但是最后的结果不是我想要的,虽然后来用c的函数strtok(),达到我的要求,但是上面的我还是搞不懂

然后,不知道大家有什么其他的方法。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2008-03-26 23:42 |只看该作者
用strchr也可以,直接定位空格字符

论坛徽章:
0
3 [报告]
发表于 2008-03-27 08:07 |只看该作者
嗯 ,但是还是想尽量不使用内置函数来写,呵呵

论坛徽章:
0
4 [报告]
发表于 2008-03-27 08:31 |只看该作者
恩,strtok在使用的时候,要注意内存只读的问题

char *str我一般都分配了空间后,再交给strtok来处理

论坛徽章:
0
5 [报告]
发表于 2008-03-27 09:53 |只看该作者
给你一个原创的:

函数:strsplit
功能:按分割串分割字符串。
参数:from                  源串
      separators            分割串
      pos                   段序号,从1开始
      to                    待存目标串位置
      to_size               待存目标串位置长度
返回值:
      目标串指针
示例:
      char *from = "123 234 456";
      char to[10];
      strsplit(from, " ", 1, to, sizeof(to));  //得 123
      strsplit(from, " ", 4, to, sizeof(to));  //得 NULL

char* strsplit(char *from, const char *separators,
                                       int pos, char *to, int to_size)
{
        char *pstart, *pend, *p;
        int i;

        if (!from || !to) {
                return NULL;
        }
        memset(to, 0, to_size);
       
        if (pos < 1) {
                return NULL;
        }
       
        pstart = from;
        pend = from + strlen(from);

        i = 0;
        while (pstart) {
                i++;
                p = strstr(pstart, separators);
                if (!p) {
                        if (i == pos) {
                                memcpy(to, pstart, MIN(strlen(pstart), to_size-1));

                                break;
                        }
                        else
                                return NULL;
                }
                if (i == pos) {
                        memcpy(to, pstart, MIN(MIN(p-pstart, pend-pstart), to_size-1));

                        break;
                }
                pstart = p + strlen(separators);
        }
       
        return to;
}

论坛徽章:
0
6 [报告]
发表于 2008-03-27 13:11 |只看该作者
原帖由 eagle518 于 2008-3-27 09:53 发表
给你一个原创的:

函数:strsplit
功能:按分割串分割字符串。
参数:from                  源串
      separators            分割串
      pos                   段序号,从1开始
      to         ...

怎么看不懂?
给解释下呗

论坛徽章:
0
7 [报告]
发表于 2008-03-27 13:12 |只看该作者
to 楼主:str不是指针么?可以这么用哦?

论坛徽章:
0
8 [报告]
发表于 2008-03-27 13:20 |只看该作者
原帖由 eagle518 于 2008-3-27 09:53 发表
给你一个原创的:

函数:strsplit
功能:按分割串分割字符串。
参数:from                  源串
      separators            分割串
      pos                   段序号,从1开始
      to         ...

怎么看不懂?
给解释下呗

论坛徽章:
0
9 [报告]
发表于 2008-03-27 14:34 |只看该作者
示例:
      char *from = "123 234 456";
      char to[10];
      strsplit(from, " ", 1, to, sizeof(to));  //得 123
      strsplit(from, " ", 4, to, sizeof(to));  //得 NULL

上面有实例的

论坛徽章:
0
10 [报告]
发表于 2008-03-27 21:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP