sscanf(text,“%s%s”,姓名,公司);
解析'ian mceknis'
但它也会解析'ian mceknis'
等等。我怎样才能解析第一个呢?它必须只包含一个空格而不是更多。
谢谢。
答案 0 :(得分:2)
如果您希望它拒绝后一个示例,您必须滚动自己的函数来查找/拒绝多个空格。
但我的猜测是,你真正想做的是剥去多余的空间。请参阅:How do I trim leading/trailing whitespace in a standard way?
答案 1 :(得分:0)
您不能仅使用具有相当基本功能的sscanf()
来执行此操作。如果你真的需要强制执行此操作(是吗?),regular expressions可能更合适。
答案 2 :(得分:0)
它不是最干净的,但这就是我为一个项目做的。基本上,不是在格式化字符串中有空格,它最多需要两个空格(您可以将其更改为也处理制表符或其他)。如果只有一个空格,那么第二个char仍为null,如果它不为null,则它被覆盖。
所以我会改变:
sscanf(text, "%s %s", name, company);
为:
char space[2] = "\0\0"
sscanf(text, "%s%2[ ]%s", name, space, company);
if(space[1] != '\0') {
//there was an extra space, handle it however
}
答案 3 :(得分:-1)
根据sscanf定义,这绝对不可能。为了得到想要的结果,我会手动读取文本变量,搜索两个随之而来的空白字符。如果找到,请将第二个空白字符替换为0,然后调用sscanf。