patterncMinor
string manipulation, which version of those 2 functions is better?
Viewed 0 times
thoseversionbettermanipulationwhichfunctionsstring
Problem
I wrote my own version of
There are 2 versions. One is my own and the other is from ccan. For some reason, I feel that ccan's version is better than mine until proven wrong.
ccan/str's version:
My version:
Update
This is the newer version of mine:
I wonder which one is better and why (in terms of readability, performance and so on). Please be specific and provide your research if possible.
Thanks in advance.
endswith just like in high-level programming languages in C which I would like reviews on.There are 2 versions. One is my own and the other is from ccan. For some reason, I feel that ccan's version is better than mine until proven wrong.
ccan/str's version:
static inline bool strends(const char *str, const char *postfix)
{
if (strlen(str) < strlen(postfix))
return false;
return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
}My version:
bool strends(const char *str, const char *postfix)
{
register const char *end = str + strlen(str) - 1;
register const char *epostfix = postfix + strlen(postfix) - 1;
while (end > str && epostfix > postfix)
if (*end-- != *epostfix--)
return false;
return true;
}Update
This is the newer version of mine:
bool strends(const char *str, const char *postfix)
{
register const char *end = str + strlen(str) - strlen(postfix);
if (strlen(str) < strlen(postfix))
return false;
while (*end)
if (*end++ != *postfix++)
return false;
return true;
}I wonder which one is better and why (in terms of readability, performance and so on). Please be specific and provide your research if possible.
Thanks in advance.
Solution
I like the more the first, because it works at an higher level of abstraction and it makes it clear that you are interested in comparing a part of the string with the postfix.
I'd probably introduce another variable to clearly represent that you are comparing the postfix with the latest
I'd probably introduce another variable to clearly represent that you are comparing the postfix with the latest
strlen(postfix) chars of the original string.Context
StackExchange Code Review Q#21066, answer score: 4
Revisions (0)
No revisions yet.