像strtok()这样的程序,用于两个分隔符

时间:2013-12-05 10:45:28

标签: c strtok

我正在编写一个程序来分隔逗号分隔值和日期:。我没有得到理想的输出。标记我需要在程序中更改的内容。

输入:0,0,2,150,123,0,0,1,0,0,0,53,-13,0,102000666,102000665,-,604400000000,-,-,-,-,123456,123,0,0,12:29:2010:7:15:24

输出:0 0 2 150 123 0 0 1 0 0 0 53 -13 0 102000666 102000665 - 604400000000 - - - - 123456 123 0 0 12 29 2010 7 15 24

预期输出:0 0 2 150 123 0 0 1 0 0 0 53 -13 0 102000666 102000665 - 604400000000 - - - - 123456 123 0 0 1229201071524

请仅检查日期格式。

我的方法

#include<stdio.h>
int main()
{
    char * t = NULL;
    char * line = "0,0,2,150,123,0,0,1,0,0,0,53,-13,0,102000666,102000665,-,604400000000,-,-,-,-,123456,123,0,0,12:29:2010:7:15:24";
    char * s = NULL;
    char temp1[1000] = {0};
    char temp2[1000] = {0};
    for( s=line,t=temp1; s && *s; s++,t++)
    {
        *t = *s;            
    if(*t==',')
    {
            *t=' '; 
        if(*(s+1)==',')
        {
            t++;
        *t='-';
        }
        }
    }
    for( s=temp1,t=temp2; s && *s; s++,t++)
    {
        *t = *s;
        if(*t == ':')
        {
             *t=' ';    
             if(*(s+1)==':')
             {
                 t++;
                 *t='-';
             }
        }
    }
    printf("%s",temp2);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

#include<stdio.h>

int main(){
    const char *line="0,0,2,150,123,0,0,1,0,0,0,53,-13,0,102000666,102000665,-,604400000000,-,-,-,-,123456,123,0,0,12:29:2010:7:15:24";
    const char *t;
    char temp[1000] = {0};
    char ch, *s = temp;
    for(t=line;ch=*t;++t){
        if(ch == ':')
            continue;
        *s++ = ch == ',' ? ' ' : ch;
    }
    //*s='\0';
    printf("%s",temp);
    return 0;
}

答案 1 :(得分:0)

你不应该在for循环中增加变量t。

答案 2 :(得分:-1)

尝试并测试:-) 在codepad :: http://codepad.org/Yak3rXO2

for( s=temp1,t=temp2; s && *s; s++,t++)
    {
        *t = *s;
        if(*t == ':')
        {
            s++ ;
            *t = *s ; 
        }
    }

当遇到“:”时,您所要做的就是复制下一个元素。您正尝试将其替换为“Space”。因此,在每次出现“:”时,将s增加到指向下一个字符,然后将其复制到temp2