C strtok令牌操作

时间:2014-11-02 11:36:24

标签: c strtok

所以我有一个读取txt文件的程序。然后我用strtok使用&#34 ;;"来标记字符串。作为分隔符。问题是我必须水平格式化那些类似于SQL查询的标记。我唯一得到的是使标记垂直打印。我很困惑。

这是我的代码。     #define _CRT_SECURE_NO_DEPRECATE     #包括     #include

int i, j;
FILE *fdin;
char *p;
char s_line[120];


char *token;
const char s[2] = ";";
int main()
{
    if ((fdin = fopen("raw14.txt", "r")) == NULL)
        return 1;

    while (fgets(s_line, sizeof(s_line), fdin))
    {   
        /*get first token */
        token = strtok(s_line, s);

        p = &s_line[strlen(s_line) - 1];
        if (*p < ' ')
            *p = '\0';
        /*Loop for Serarating*/
        while (token){

            printf("Description")
            printf(" %s\n", token);


            token = strtok(NULL, s);
       }

   }

   printf("\n\n");

   return 0;
}

结果应如下所示:

项目ID描述数量平衡的数量

240201 AEROSIL | 253.50 231.00 | 22.50

240202 ALCOHOL | 663.00 412.78 | 250.22

txt部分就是这样:

240201; AEROSIL; 253.5; 231 240202;醇; 663; 412.78

请注意,我不知道如何创建额外的余额列,并且只将管道放在strtok上。我确实得到了我还应该使用左侧对齐并格式化printf以获得结果。

3 个答案:

答案 0 :(得分:0)

  

我必须水平格式化这些令牌

那么为什么然后在每个令牌后打印换行符('\n')?

而不是

    while (token) {

        printf("Description")
        printf(" %s\n", token);

        token = strtok(NULL, s);
   }
你可以做

    while (token) {

        printf("Description")
        printf(" %s", token);

        token = strtok(NULL, s);
    }
    printf("\n");

答案 1 :(得分:0)

你的printf中有一个\ n(换行符),因此每个标记都印在自己的行上。

更改此

while (token){
    printf("Description")
    printf(" %s\n", token);


    token = strtok(NULL, s);
}

到这个

while (token) {
    printf(" %s", token);
    token = strtok(NULL, s);
}
printf("\n"); // Put the newline character outside the loop.

您还应该在外部循环外打印Description ID BALANCE文本。

答案 2 :(得分:0)

每次打印令牌时都会打印一个新行。 如果您希望它们像CHOCOLATE 1 4一样打印,只需在循环中使用printf("%s ", token);即可。而且你也不应该在循环中打印Description。