程序的 strtok 部分出现错误
Buggy at strtok part of program
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] 在不同的行上并且插入了一个额外的 space 字符。好像想不通?希望有人可以帮助我阐明这一点。
Sample Run:
Input: 1, 2, 3,4, 5
Output:
5
4 3 2 1
如果传递的 array
是使用类似 fgets
的函数从 stdin 获得的,它可能在空终止符之前包含一个换行符。
如果 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]
}
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] 在不同的行上并且插入了一个额外的 space 字符。好像想不通?希望有人可以帮助我阐明这一点。
Sample Run:
Input: 1, 2, 3,4, 5
Output:
5
4 3 2 1
如果传递的 array
是使用类似 fgets
的函数从 stdin 获得的,它可能在空终止符之前包含一个换行符。
如果 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]
}