Is there a way to count tokens in C?

前端 未结 3 1626
遥遥无期
遥遥无期 2021-02-08 08:00

I\'m using strtok to split a string into tokens. Does anyone know any function which actually counts the number of tokens?

I have a command string and I nee

相关标签:
3条回答
  • 2021-02-08 08:04

    One approach would be to simply use strtok with a counter. However, that will modify the original string.

    Another approach is to use strchr in a loop, like so:

    int count = 0;
    char *ptr = s;
    while((ptr = strchr(ptr, ' ')) != NULL) {
        count++;
        ptr++;
    }
    

    If you have multiple delimiters, use strpbrk:

    while((ptr = strpbrk(ptr, " \t")) != NULL) ...
    
    0 讨论(0)
  • 2021-02-08 08:07

    Here is a version based on strtok which does not modify the original string, but a temporal copy of it. This version works for any combination of tabs and space characters used as tokens separators. The function is

    unsigned long int getNofTokens(const char* string){
      char* stringCopy;
      unsigned long int stringLength;
      unsigned long int count = 0;
    
      stringLength = (unsigned)strlen(string);
      stringCopy = malloc((stringLength+1)*sizeof(char));
      strcpy(stringCopy,string);
    
      if( strtok(stringCopy, " \t") != NULL){
        count++;
        while( strtok(NULL," \t") != NULL )
            count++;
      }
    
      free(stringCopy);
      return count;
    }
    

    A function call could be

    char stringExample[]=" wordA 25.4 \t 5.6e-3\t\twordB 4.5e005\t ";
    printf("number of elements in stringExample is %lu",getNofTokens(stringExample));
    

    Output is

    number of elements in stringExample is 5
    
    0 讨论(0)
  • 2021-02-08 08:25

    As number of tokens is nothing but one more than the frequency of occurrence of the delimiter used. So your question boils down to find no. of times of occurrence of a character in a string

    say the delimiter used in strtok function in c is ' '

    int count =0,i;
    char str[20] = "some string here";
    
    for(i=0;i<strlen(str);i++){
        if(str[i] == ' ')
            count++;
    }
    

    No. of tokens would be same as count+1

    0 讨论(0)
提交回复
热议问题