gpt4 book ai didi

c - 如何使用 sscanf 处理具有多个单词且末尾有数字的字符串

转载 作者:行者123 更新时间:2023-11-30 15:03:54 24 4
gpt4 key购买 nike

假设我有以下字符串和一个 bool 值:

bool numberGiven = false

"@give chocolate"

"@give white chocolate"

"@give dark chocolate"

"@give white chocolate 10"

"@give dark chocolate 2"

我想使用 sscanf 将单词一起保存在 char[] 中,并将整数单独保存为 int。

我希望该数字是可选输入。用户不必输入数字,但如果输入数字, bool 值“numberGiven”将变为“true”。

我需要一个 if 语句来决定是否必须使 numberGiven 为“true”。请注意,“项目名称”甚至可以不仅仅是两个单词。例如,可以使用 Kinder Schoolade 黑巧克力代替黑巧克力(当然还有末尾的可选整数)

最佳答案

Never use (s)scanf for anything 。相反,使用手写的解析器。使用 isdigit(来自 ctype.h)扫描字符串,直到到达第一个数字,然后使用 strtoul 转换数字。像这样的事情:

char *p = str, *q;
while (*p && !isdigit(*p)) p++;
if (!*p) {
numberGiven = false;
return;
}
numberGiven = true;
q = p-1;
while (q > str && isspace(*q) q--;
q[1] = '\0'; /* cut off the string before the number */
errno = 0;
number = strtoul(p, &q, 10);
if (q == p || *q != '\0' || errno)
parse_error();

关于c - 如何使用 sscanf 处理具有多个单词且末尾有数字的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495710/

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