![](/img/trans.png)
[英]Splitting a user-entered String into separate tokens by white space in C
[英]C - Splitting a user input up into tokens and identify/format them in output
好的,所以我要澄清的问题是,用户输入,即“嘿,今晚有 5 位好友 3.15 65”
我需要使用空格分隔符将此字符串拆分为令牌,我可以做得很好。 我的问题是在 3.15 上,我被卡住了,在我的任务中,它声明如果它不是整数,我必须将其标识为字符串并输出如下所示的结果。
“str str int str str str int”
因为 5 和 65 是唯一的整数。
现在我这样做:
int main(int argc, char **argv)
{
char arr[66];
char *tokens[10];
int counter = 0;
char *ptr = strtok(arr, " \n");
while(ptr != NULL){
tokens[i++] = ptr;
ptr = strtok(NULL, " \n");
}
for(int i = 0; i < counter; i++){
if(!isdigit(*tokens[i])){
printf("str");
}else{
printf("int");
}
}
return 0;
}
我的问题是 isdigit 函数认为 3.14 是整数,我是否需要使用修饰符或其他东西来使其识别为 str ?
isdigit(*tokens[i])
只查看第一个字符,而不是整个令牌/字符串。
要检测标记是否为整数,请形成一个简单的辅助函数。 根据需要进行调整。
// Look for an optional sign, at least 1 digit and then a null character.
int IsInteger(const char *s) {
if (*s == '+' || *s == '-') s++;
int digit_found = false;
while (isdigit((unsigned char) *s) {
s++;
digit_found = 1;
}
// end with null character?
return *s == '\0' && digit_found;
}
可以改用strtol()
等。
int IsInteger(const char *s) {
char *endptr;
strtol(s, &endptr, 10); // no need to save result, just need to detect conversion.
return s != endptr && *endptr == '\0';
}
...
for(int i = 0; i < counter; i++){
if(IsInteger(tokens[i])) {
printf("str");
} else{
printf("int");
}
}
此外,增加counter
,而不是i
。
while(ptr != NULL){
// tokens[i++] = ptr;
tokens[counter++] = ptr;
ptr = strtok(NULL, " \n");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.