这段代码很好用。但我想知道它是否可以以更有效的方式完成?
更具体地说,这部分*(s1 + i)
是否可以强制它通过指针(例如*s1++
)按字符逐个整个数组。
我的任务是执行这个函数compareStrings而没有索引数组[]。
int compareStrings(const char *s1, const char *s2)
{
int i = 0, answer;
// i - to sequence through array of characters
// pointer to character string1 and character string2
while (*(s1 + i) == *s2 + i && *(s1 + i) != '\0'&& *(s2 + i) != '\0')
{
i++;
}
if ( *(s1 + i) < *(s2 + i) )
answer = -1; /* s1 < s2 */
else if ( *(s1 + i) == *(s2 + i) )
answer = 0; /* s1 == s2 */
else
answer = 1; /* s1 > s2 */
return answer;
但我想将其更改为s1++
和s2++
*(s1 + i)
和*(s2 + i)
。我已经尝试实现这个想法,并将一个额外的指针指向开头,但我失败了。这里是代码 - &gt;
int compareStrings(const char *s1, const char *s2)
{
int answer;
char **i = s1, **j = s2;
// i and j - to sequence through array of characters
while (*(i++) == *(j++) && *(i++) != '\0'&& *(j++) != '\0');
if (*i < *j)
answer = -1; /* s1 < s2 */
else if (*i == *j)
answer = 0; /* s1 == s2 */
else
answer = 1; /* s1 > s2 */
return answer;
}
答案 0 :(得分:2)
为了比较C字符串,您只需要
int str_cmp(const char* s1, const char* s2)
{
while (*s1 != 0 && *s2 != 0 && *s1 == *s2)
{
++s1;
++s2;
}
if (*s1 == *s2)
{
return 0;
}
return *s1 < *s2 ? -1 : 1;
}
答案 1 :(得分:1)
后一个代码不起作用,因为你增加s1
两次:
*s1++ == *s1++
这将:
s1
你基本上是这样做的:
*(s1) == *(s1+1)
我认为那应该是:
*s1++ == *s2++