Этот фрагмент кода отлично работает. Но мне интересно, можно ли это сделать более эффективным способом?указатели в функции C
Более конкретно эта часть *(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++
InstEd из *(s1 + i)
и *(s2 + i)
. Я попытался реализовать эту идею, сославшись на дополнительный указатель на начало, но я потерпел неудачу. Вот код ->
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;
}
Я думаю, что он лучше подходит для [обзора кода] (http://codereview.stackexchange.com/) – yeputons
while (* (s1 + i) == * (s2 + i) && * (s1 + i)! = '\ 0' && * (s2 + i)! = '\ 0') – Yellowfun
Спасибо! @yeputons! – Yellowfun