不用strlen判断哪个char *最短
Determine which char * is the shortest without strlen
我有两个不同的 char *
,char *string1
是不变的,char *string2
是可以改变的。我从列表中检索 char *string2
。
我想找到最短的长度 char *
以将其用于:
strncmp(string1, string2, shortest);
。
这将在一个 while 循环中进行,如下所示:
...
int shortest;
while (string2) {
// get the length of the shortest char *
if (!strncmp(string1, string2, shortest))
break;
string2 = list_next(list); // Returns NULL if there is no elements left
}
...
我无法使用 strlen(const char *s)
,因为它对我的用例来说太慢了。
创建一个包含指针和长度的结构。然后你有预先计算的长度并检查它应该很快。
一个更好的主意是使用已经为您完成此操作的其他人的字符串库。除了计算字符串长度之外,大多数库极大地通过避免标准字符串操作来提高 C 的缓冲区安全性。
对于strncmp
的具体情况,您可以自己实现比较功能return想要的结果,例如:
bool strprefixeq(const char *a, const char *b) {
while (*a && *b) {
if (*a++ != *b++) {
return false;
}
}
return true;
}
(当然如果你对字符串长度有其他需求的话,最好按照建议预先计算保存)
我有两个不同的 char *
,char *string1
是不变的,char *string2
是可以改变的。我从列表中检索 char *string2
。
我想找到最短的长度 char *
以将其用于:
strncmp(string1, string2, shortest);
。
这将在一个 while 循环中进行,如下所示:
...
int shortest;
while (string2) {
// get the length of the shortest char *
if (!strncmp(string1, string2, shortest))
break;
string2 = list_next(list); // Returns NULL if there is no elements left
}
...
我无法使用 strlen(const char *s)
,因为它对我的用例来说太慢了。
创建一个包含指针和长度的结构。然后你有预先计算的长度并检查它应该很快。
一个更好的主意是使用已经为您完成此操作的其他人的字符串库。除了计算字符串长度之外,大多数库极大地通过避免标准字符串操作来提高 C 的缓冲区安全性。
对于strncmp
的具体情况,您可以自己实现比较功能return想要的结果,例如:
bool strprefixeq(const char *a, const char *b) {
while (*a && *b) {
if (*a++ != *b++) {
return false;
}
}
return true;
}
(当然如果你对字符串长度有其他需求的话,最好按照建议预先计算保存)