将字符串数组组件与字符进行比较

时间:2016-11-29 16:04:30

标签: c arrays string token

我有这个功能:int foo(char *string, int x, int y) 示例输入为:-.-..-...-.程序使用分隔符-标记字符串。然后它计算令牌中的.。问题是db变量没有改变。计数后,db必须高于x且低于y。所以-..-..- ...- 2 3,解决方案必须是2。

    char *token;
    int length;
    int i;
    int db=0;
    int igaz=0;
    int j=1;

    token = strtok(string, "-");
    length = strlen(token);

    while(token != NULL)
    {
        length = strlen(token);

        for(i=0; i<length; i++);
        {
            if(token[i] == '.')
            //if(strcmp(token[i],'.')==0)
            {
                db++;
            }
        }

        if(db >= x && db <= y)
        {
            igaz++;
        }
        db=0;

        token = strtok(NULL, "-");
        j++;

    }
    return igaz;

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个问题。  1.对于带有半结肠的循环。

for(i=0; i<length; i++);

这将使线程循环。但它不会执行for循环体。

  1. strlen()将返回字符串长度,最后不包括'\ 0'。所以你的for循环应该是0到length,如下所示。
  2.   

    for(i=0; i<=length; i++);

    1. For循环是不必要的,因为字符串只有' - '和'。'
    2. 这样就可以了。

      int foo(char *string, int x, int y)
      {
          char *token;
          int igaz =0;
          int db   = 0;
      
          token = strtok(string, "-");
      
          while(token != NULL)
          {
             db = strlen(token);
      
      
             if(db >= x && db <= y)
             {
                 igaz++;
             }
      
             token = strtok(NULL, "-");
      
          }
          return igaz;
      
      }
      
相关问题