gpt4 book ai didi

c - 使用scanf只扫描一个单词,但前面有空格

转载 作者:行者123 更新时间:2023-12-02 21:44:41 25 4
gpt4 key购买 nike

是否可以仅在 C 中扫描带有空格+单词的文本?

这里是示例文本:

"Oh my   god!"

这是函数:

...declarations...malloc...etc.
for (int i = 0; ; i++)
{
some_scanf_func(s, "%some format", input);
c = getchar();
if (c == EOF)
break;
else
ungetc(c, stdin);
}

所以我的输入是:

"Oh" when i = 0;

" my" when i = 1;

" god!" when i = 2;

空格位于单词的前面。标点符号被视为有效字符。

谢谢 chux 的技巧,也谢谢 Charlie 的回答。

最佳答案

使用“%*s%n”

%*s 跳过前导空格,然后扫描非空格文本。 * 表示不说出结果。

%n 表示记录扫描的位置(如果我们到达那里)。

char input[100];
char *p = input;
int count = 0;
if (fgets(input, sizeof input, stdin) == NULL) {
; // handle EOF
}
while (*p) {
int n = 0;
sscanf(p, "%*s%n", &n);
if (n == 0) break;
p = &p[n];
count++;
}

buffer隔离单词

char *previousp; 
while (*p) {
int n = 0;
sscanf(p, "%*s%n", &n);
if (n == 0) break;
previousp = p
p = &p[n];
// At this point `previousp` to p is OP desired output.
printf(%.*s\n", p - previousp, previousp);
count++;
}

OP想要使用sscanf(),但按照@Charlie Burns的建议简单地沿着缓冲区前进是有意义的。

const char *p = buffer;
while (*p) {
const char *endp = p;
while (isspace(*endp)) endp++;
while (*endp && !isspace(*endp)) endp++;
// At this point `p` to `endp` is OP desired output.
printf(%.*s\n", endp - p, p);
p = endp;
}

关于c - 使用scanf只扫描一个单词,但前面有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744169/

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