| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 421 人关注过本帖
标题:在用strtok_r实现字符串分隔的时候,遇到一个问题。
只看楼主 加入收藏
hit小龙
Rank: 6Rank: 6
等 级:侠之大者
帖 子:173
专家分:462
注 册:2012-12-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
在用strtok_r实现字符串分隔的时候,遇到一个问题。
在用strtok_r实现字符串分隔的时候,遇到一个问题。
当需要分隔的字符串之间存在错误时,
比如, 我的文件里每行的字符串是这样的
1,2,3,4
5,6,7,8
以逗号分隔。

但是,如果有组数据,漏了某项。 比如这样
1,,3,4
这时候,我的获取就出现问题了,  求教,这个时候我要怎么解决?

while((p[i]=strtok_r(buf,";",&outer_ptr))!=NULL)
 {
        i++;
        buf=NULL;
 }

我是这样分隔的。    希望在错误的地方。  比如1,,3,4中。  2的位置修改为?,即p[1]="?"表示出错。

求教...
在线等。
搜索更多相关主题的帖子: 字符串 在线 
2013-11-20 22:04
pink_duo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:209
专家分:1054
注 册:2013-11-5
收藏
得分:15 
鲁主,试试下面这段代码
#include <string.h>
#include <stdio.h>
int main(void)
{
char input[16] = "abc,?,,,,,d";
char *p;

p = strtok(input, ",");
if (p) printf("%s\n", p);
p = strtok(NULL, ",");
if (p) printf("%s\n", p);
p = strtok(NULL, ",");
if (p) printf("%s\n", p);
return 0;
}

[ 本帖最后由 pink_duo 于 2013-11-21 09:14 编辑 ]

埋头做牛,抬头做人,低头做狗
2013-11-21 09:11
hit小龙
Rank: 6Rank: 6
等 级:侠之大者
帖 子:173
专家分:462
注 册:2012-12-6
收藏
得分:0 
回复 2楼 pink_duo
你好。
看了下你的代码,效果和我这是一样的。
#include <string.h>
#include <stdio.h>
int main(void)
{
    char buffer[30] = "abc,?,,,,d";
    int i = 0, j = 0;
    char *p[20]= {NULL};
    char *buf = buffer;
   
    char *outer_ptr=NULL;
    while((p[i]=strtok_r(buf,",",&outer_ptr))!=NULL)
    {
        i++;
        buf=NULL;
    }
    for (j=0; j<i; j++)
    {
        printf("%s--",p[j]);
    }
   
    return 0;
}

这样的输出,是abc--?--d--      
而针对这个例子,我想要的结果是abc--?--?--?--?--d-- 这样的。
即以,分隔 但是如果说,,内没有内容,则在该位置用?表示。
请问, 你知道要怎么实现吗?
2013-11-21 10:21
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
不用系统函数 自己写一个 想咋分就咋分

DO IT YOURSELF !
2013-11-21 10:54
pink_duo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:209
专家分:1054
注 册:2013-11-5
收藏
得分:0 
鲁主,试试这个自定义函数
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define SIZE 50
void self_stk(char *p,char find);

int main(void)
{
char input[SIZE] = "abc,1,,,,,d";
char find = 0x2c;  //逗号

self_stk(input,find);
return 0;
}

void self_stk(char *p,char find)
{
    int flag = 0;

    while(*p != '\0')
    {
        if(*p == find)
        {            
            if(flag == 1)
            {
                p++;
                flag = 0;
            }
            else
            {
                printf("?--");
                p++;
            }
        }
        else
        {            
            printf("%c--",*p);
            p++;
            flag = 1;
        }
    }
}

埋头做牛,抬头做人,低头做狗
2013-11-21 11:04
hit小龙
Rank: 6Rank: 6
等 级:侠之大者
帖 子:173
专家分:462
注 册:2012-12-6
收藏
得分:0 
回复 5楼 pink_duo
你提供的这个不能捕获连续的字符。
不过给了我启示。 自定义函数解决问题。

还是很感谢。
2013-11-22 22:14
快速回复:在用strtok_r实现字符串分隔的时候,遇到一个问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033440 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved