尝试计算 C 中 strtok() 生成的标记数
Attempting to count the number of tokens produced by strtok() in C
我目前正在实施一个程序,用户可以在其中输入带值的推送或带值的弹出。为了拆分我使用的令牌 strtok()
。除了用户输入三个值外,所有情况在我的程序中都运行良好:例如,正确的可接受输入是 "push 5" 或 "pop"。例如,当用户输入时: "push 5 7" 我希望能够计算出有 3 个令牌,因此拒绝输入。通过命令行参数的程序询问用户将通过 STDIN
输入多少行,因此我有一个 for 循环。使用我当前的计数器,第一个循环总是 returns 正确的标记数,但在它之后的每个循环 returns 0.
int main(int argc, char *argv[]){
int numlines = atoi(argv[1]);
for(int i = 1; i<= numlines; i++){
char str[256];
fgets(str,256,stdin);
str[strcspn(str, "\n")] = 0;
char *tmp;
char *token;
char *tmp2;
int count; //This is the counter for the tokens
tmp = strtok(str," ");
while(token != NULL){
tmp2 = token;
token = strtok(NULL, " ");
count++;
}
printf("%d\n", count);
}
底部有更多代码可以操纵 tmp 和 tmp2 令牌,但效果很好。同样,计数器对第一个 运行 有效,但始终对 returns 0 有效。感谢大家的帮助。
count
在 for
循环内声明,因此在循环结束后它不在范围内。需要在循环前声明,同时初始化为0
.
此外,您应该将第一个 strtok()
的结果分配给 token
。否则,您将在循环中第一次测试未初始化的变量。
我不确定 tmp
和 tmp2
是干什么用的,因为你从不使用它们;我想它们是用于您尚未添加的代码,所以我将它们留在了里面。
int main(int argc, char *argv[]){
int numlines = atoi(argv[1]);
int count = 0; //This is the counter for the tokens
for(int i = 1; i<= numlines; i++){
char str[256];
fgets(str,256,stdin);
str[strcspn(str, "\n")] = 0;
char *tmp;
char *token;
char *tmp2;
tmp = token = strtok(str," ");
while(token != NULL){
tmp2 = token;
token = strtok(NULL, " ");
count++;
}
}
printf("%d\n", count);
}
我目前正在实施一个程序,用户可以在其中输入带值的推送或带值的弹出。为了拆分我使用的令牌 strtok()
。除了用户输入三个值外,所有情况在我的程序中都运行良好:例如,正确的可接受输入是 "push 5" 或 "pop"。例如,当用户输入时: "push 5 7" 我希望能够计算出有 3 个令牌,因此拒绝输入。通过命令行参数的程序询问用户将通过 STDIN
输入多少行,因此我有一个 for 循环。使用我当前的计数器,第一个循环总是 returns 正确的标记数,但在它之后的每个循环 returns 0.
int main(int argc, char *argv[]){
int numlines = atoi(argv[1]);
for(int i = 1; i<= numlines; i++){
char str[256];
fgets(str,256,stdin);
str[strcspn(str, "\n")] = 0;
char *tmp;
char *token;
char *tmp2;
int count; //This is the counter for the tokens
tmp = strtok(str," ");
while(token != NULL){
tmp2 = token;
token = strtok(NULL, " ");
count++;
}
printf("%d\n", count);
}
底部有更多代码可以操纵 tmp 和 tmp2 令牌,但效果很好。同样,计数器对第一个 运行 有效,但始终对 returns 0 有效。感谢大家的帮助。
count
在 for
循环内声明,因此在循环结束后它不在范围内。需要在循环前声明,同时初始化为0
.
此外,您应该将第一个 strtok()
的结果分配给 token
。否则,您将在循环中第一次测试未初始化的变量。
我不确定 tmp
和 tmp2
是干什么用的,因为你从不使用它们;我想它们是用于您尚未添加的代码,所以我将它们留在了里面。
int main(int argc, char *argv[]){
int numlines = atoi(argv[1]);
int count = 0; //This is the counter for the tokens
for(int i = 1; i<= numlines; i++){
char str[256];
fgets(str,256,stdin);
str[strcspn(str, "\n")] = 0;
char *tmp;
char *token;
char *tmp2;
tmp = token = strtok(str," ");
while(token != NULL){
tmp2 = token;
token = strtok(NULL, " ");
count++;
}
}
printf("%d\n", count);
}