【发布时间】:2015-02-08 09:36:20
【问题描述】:
我试图只提取除句子中其他字符之外的字母词。
为此,我使用两个 scanf() 如下所示。
scanf("%s", word);
sscanf(word, "%[A-Za-z]", word);
问题是,没有删除双引号,尽管我将格式设置为 %[A-Za-z] 然而奇怪的是,如果这个标记在单词的最后一个位置上,它就被移除了。
有人知道原因吗?
测试用例
- “迪士尼乐园
- 左。”
#include <stdio.h>
#include <string.h>
#define MAX_WORD 128
int main(int argc, char* argv[]) {
char word[MAX_WORD];
/* Read all of contents */
while (EOF != scanf("%s", word)) {
printf("origin word: %s\n", word);
sscanf(word, "%[A-Za-z\"]s", word);
printf("transformed: %s\n", word);
}
}
【问题讨论】:
-
呃...目标可以和
sscanf的读取字符串相同吗?看起来很吓人……这里有没有过分热情的语言律师? -
您是否希望
sscanf()跳过第一个引号?我认为它会在不读取任何内容的情况下返回(保持word的内容不变)。 -
@KarolyHorvath,它可能是安全的,但我只是基于我如何实现
sscanf,至少对于这个特定的用例:-)跨度> -
哦,很抱歉我的内容出现了一些错误。我已经修改过了。而且,我的目的是仅使用 sscanf() 从标准输入中提取一个字母。我只想知道是我的错误使用还是sscanf的限制造成的。
-
如果字符串包含
-,%[的行为是实现定义的。所以这段代码依赖于你的系统所拥有的任何 libc 实现,而不是标准 C。
标签: c string scanf standard-library