C - 从字符串中的两个逗号之间提取整数

时间:2016-01-09 16:41:33

标签: c split string-split

我有一个包含bicho,25,25-04-2000的char数组。 我想提取bicho并将其放在变量中,2525-04-2000也是如此。

我尝试了strtok()sscanf,但没有运气。

这是我使用的方法:

fp = fopen(fn,"r");
while(!feof(fp)){
  fgets(data, 255,fp);
  puts(data);
  pch = strtok (data,",");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, ",");
  }
}


我想将每个值存储在单独的变量中而不打印它。

1 个答案:

答案 0 :(得分:0)

您无需使用feof。您可以使用fgets作为循环条件。然后,只需将字符串存储在数组中即可。然后,您可以使用strtolatoi(如果需要)以数字方式转换您的号码。例如,您可以执行以下操作:

#define MAXL 10
#define MAXC 32

char array[MAXL][MAXC] = See all set up;
size_t index = 0;

if (!(fp = fopen (fn, "r"))) {
    fprintf (stderr, "error: file open faied '%s'.\n", fn);
    return 1;
}

while (fgets (data, 255,fp)) 
{
    char *p = data;
    if ((p = strtok (data, ","))) {
        size_t plen = strlen (p);
        if (plen + 1 < MAXC)
            strncpy (array[index++], p, plen + 1);
        else
            fprintf (stderr, "error: string exceeded MAXC\n");

        while (index < MAXL && (p = strtok (NULL, ",\n")) != NULL)
        {
            plen = strlen (p);
            if (plen + 1 < MAXC)
                strncpy (array[index++], p, plen + 1);
            else
                fprintf (stderr, "error: string exceeded MAXC\n");
        }
    }
}

使用for循环

您可以更有效地使用for循环执行相同的操作:

while (fgets (data, 255,fp) 
{
    char *p = data;
    for (p = strtok (data, ","); index < MAXL && p; p = strtok (NULL, ",\n"))
    {
        size_t plen = strlen (p);
        if (plen + 1 < MAXC)
            strncpy (array[index++], p, plen + 1);
        else
            fprintf (stderr, "error: string exceeded MAXC\n");    
    }
}

注意:通过在复制到阵列之前确认长度plen,您可以确保您的字符串 nul-terminated 。如果您还有其他问题,请与我们联系。

相关问题