gpt4 book ai didi

C - 将用户输入拆分为标记并在输出中识别/格式化它们

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:17 25 4
gpt4 key购买 nike

好的,所以我要澄清的问题是,用户输入,即“嘿 5 伙计 3.15 今晚 65”

我需要使用空格分隔符将此字符串拆分为标记,我可以做到这一点。我的问题是在 3.15 上,我卡住了,在我的作业中声明如果它不是整数,我必须将它识别为字符串并输出如下所示的结果。

“str str int 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]) 只查看第一个字符,而不是整个 token /字符串。


要检测标记是否为整数,请形成一个简单的辅助函数。根据需要进行调整。

// 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");
}

关于C - 将用户输入拆分为标记并在输出中识别/格式化它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41970939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com