void reverseTokens(char *array,int nump,char*delimp)
{
char * revString[nump+20];//array of pointer where 1 pointer points to one instance of a token
char* token;
int i=nump+19;
token=strtok(array,delimp);
while(token!=NULL) //assigning token's address to pointer + tokenizing
{
revString[i]=token;
token=strtok(NULL,delimp);
i--;
}
i++;
for(int j=i;j<=nump+19;j++)
{
printf("%s ",revString[j]);
}
}
当我打印出第一个标记时,即revString [i]在另一行上,并插入了一个多余的空格字符。似乎无法弄清楚?希望有人可以帮助我阐明这一点。
Sample Run:
Input: 1, 2, 3,4, 5
Output:
5
4 3 2 1
如果通过array
之类的函数从stdin获得传递的fgets
,则它可能在空终止符之前包含换行符。
如果delimp
字符串不包含此字符,则strtok
将把它视为最后一个标记的一部分。
以下代码段demonstrates这样的行为:
#include <stdio.h>
#include <string.h>
void reverse_tokens(char *array, int max_n_tokens, const char *delim)
{
const char *tokens[max_n_tokens];
int i = 0;
const char *token = strtok(array, delim);
while ( token && i < max_n_tokens )
{
tokens[i] = token;
token = strtok(NULL, delim);
++i;
}
while ( i-- > 0 )
{
printf("[%s] ", tokens[i]);
}
putchar('\n');
}
int main(void)
{
char str_1[] = "1, 2, 3,4, 5";
reverse_tokens(str_1, 5, ","); // --> [ 5] [4] [ 3] [ 2] [1]
char str_2[] = "1, 2, 3,4, 5\n";
reverse_tokens(str_2, 5, ","); // --> [ 5
// ] [4] [ 3] [ 2] [1]
char str_3[] = "1, 2, 3,4 , 5\n";
reverse_tokens(str_3, 5, ", \n\r"); // --> [5] [4] [3] [2] [1]
char str_4[] = "1, 2, 3, 4, 5";
reverse_tokens(str_4, 3, ", \n\r"); // --> [3] [2] [1]
}