【发布时间】:2014-12-22 23:28:37
【问题描述】:
让我们拥有这段代码
char input[] = "key: value";
char key[32], value[32];
sscanf(input, "%31[^:]:%*[ ]%31s", key, value);
: 之后可以有零个或多个空格,我想将键值存储到 c 字符串变量中。上面的代码可以使用一个或多个空格,但如果使用零个空格就很不幸了。
有没有一种简单的方法来解析这些字符串?不一定是 sscanf,但我想避免使用正则表达式。
编辑
我发现reference 支持已接受的答案(多么有用但不直观的功能):
该函数将读取并忽略任何空白字符 在下一个非空白字符(空白 字符包括空格、换行符和制表符——参见 isspace)。 格式字符串中的单个 空格可验证任意数量的 从流中提取的空白字符(不包括)。
【问题讨论】:
-
@PaulRoub:情况是相关的,但我认为这与可能的重复不同。特别是,这个问题有一个简单的解决方案;我认为在另一个问题中没有“必要时尝试两次”答案的替代方法。
-
我建议使用 strstr 查找 ':' 将 ':' 替换为 '\0' 然后 strncpy() 来获取第一个字符串。然后使用先前获取的 ptr 到 '\0',前进到下一个非 '' 字符,然后可能 sscanf() 来检索第二个字符串。另一种方法是使用 strtok()