gpt4 book ai didi

检查一个字符串在 C 中是否只有空白字符

转载 作者:行者123 更新时间:2023-12-01 23:15:03 25 4
gpt4 key购买 nike

我正在 C11 中实现一个 shell,我想在执行系统调用以执行命令之前检查输入的语法是否正确。我想要防止的可能输入之一是仅由空白字符组成的字符串。检查字符串是否仅包含空格、制表符或任何其他空格字符的有效方法是什么?

解决方案必须在 C11 中,并且最好使用标准库。使用 readline.h 中的 readline() 从命令行读取的字符串,并保存在一个字符数组中 (char[] ).到目前为止,我想到的唯一解决方案是遍历数组,并使用 isspace() 检查每个单独的 char。有没有更有效的方法?

最佳答案

So far, the only solution that I've thought of is to loop over the array, and check each individual char with isspace().

听起来不错!

Is there a more efficient way?

不是真的。如果您想确保只存在空格,您需要检查每个字符。 可能有一些涉及位掩码的技巧可以更快地检测非空格字符(like strlen() does 以找到 NUL 终止符),但我绝对建议这样做。

您可以使用 strspn() or strcspn()检查返回值,但这肯定会更慢,因为这些函数旨在处理任意接受/拒绝字符串并且需要首先构建查找表,而 isspace() 针对其目的使用预构建的查找表,并且很可能还会被编译器使用适当的优化标志内联。除此之外,vectorization的代码似乎是进一步加快速度的唯一方法。使用 -O3 -march=native -ftree-vectorize 进行编译(另请参见 this post)并运行一些基准测试。

关于检查一个字符串在 C 中是否只有空白字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60049741/

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