我strtok
用来将字符串拆分为标记。有谁知道任何实际计算令牌数量的函数?
我有一个命令字符串,我需要拆分它并将参数传递给execve()
.
谢谢!
编辑
execve
将参数作为char**
,所以我需要分配一个指针数组。在不知道有多少令牌的情况下,我不知道要分配多少。
一种方法是简单地使用strtok
计数器。但是,这将修改原始字符串。
另一种方法是strchr
在循环中使用,如下所示:
int count = 0;
char *ptr = s;
while((ptr = strchr(ptr, ' ')) != NULL) {
count++;
ptr++;
}
如果您有多个分隔符,请使用strpbrk
:
while((ptr = strpbrk(ptr, " \t")) != NULL) ...
因为令牌的数量只不过是使用的分隔符的出现频率多一个。所以你的问题归结为没有。字符串中字符出现的次数
说c中strtok函数中使用的分隔符是''
int count =0,i;
char str[20] = "some string here";
for(i=0;i<strlen(str);i++){
if(str[i] == ' ')
count++;
}
令牌数将与 count+1 相同
这是一个基于strtok
它的版本,它不修改原始字符串,而是它的临时副本。此版本适用于用作标记分隔符的制表符和空格字符的任意组合。功能是
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;
}
函数调用可能是
char stringExample[]=" wordA 25.4 \t 5.6e-3\t\twordB 4.5e005\t ";
printf("number of elements in stringExample is %lu",getNofTokens(stringExample));
输出是
number of elements in stringExample is 5