在标准C库中是否有大约startsWith(str_a, str_b)
个?
它应该接受指向两个以空字节结尾的字符串的指针,并告诉我第一个字符串是否也完全出现在第二个字符串的开头.
例如:
"abc", "abcdef" -> true
"abcdef", "abc" -> false
"abd", "abdcef" -> true
"abc", "abc" -> true
在标准C库中是否有大约startsWith(str_a, str_b)
个?
它应该接受指向两个以空字节结尾的字符串的指针,并告诉我第一个字符串是否也完全出现在第二个字符串的开头.
例如:
"abc", "abcdef" -> true
"abcdef", "abc" -> false
"abd", "abdcef" -> true
"abc", "abc" -> true
显然,这方面没有标准的C函数.因此:
bool startsWith(const char *pre, const char *str)
{
size_t lenpre = strlen(pre),
lenstr = strlen(str);
return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
}
注意,上面的代码清晰明了,但是如果您是在一个紧密的循环中执行,或者处理very个大字符串,那么它不会提供最佳的性能,因为它会提前扫描两个字符串的全长(strlen
).像wj32's或Christoph's这样的解决方案可能会提供更好的性能(虽然Fred Foo's solution8?noredirect=1#comment50194475_4771386">this comment关于矢量化超出了我的C知识).另请注意Fred Foo's solution,这避免了str
的strlen
(他是对的,如果您使用strncmp
而不是memcmp
,就没有必要了).只对(非常)大的字符串或在紧密循环中重复使用才重要,但当它重要时,它就很重要.