简化字符串迭代

时间:2016-12-06 10:42:25

标签: c loops

我在学习编码的最开始(特别是C)。 在编写一个计算数组字符的函数用于学习目的时,我正在质疑自己(我非常肯定),如果有可能简化这个迭代:

int stringlength(char* s)
{
    int i = 0;

    while (s != NULL && *(s + i) != '\0')
        i++;

    return i;
}

我想将i++保留在迭代本身内(for loop?)。

我很欣赏你们给我的任何暗示。如果您发现了一些与我无关的问题 - 请告诉我。

4 个答案:

答案 0 :(得分:2)

if(s == NULL)
    return 0;
int i;
for(i = 0; s[i] != '\0'; i++);

我相信这可以解决你的目的。

编辑:为输入char*添加NULL检查,因为NULL可能是一个可能的值。

答案 1 :(得分:1)

int stringlength(char* s)
{
    if (!s) 
       return 0;
    int i = -1;
    while(s[++i]!='\0');
    return i;
}

答案 2 :(得分:0)

我测试了strlen(NULL)的{​​{1}},导致glibc,我认为导致Segment Fault是合理的。所以这是我的实现:

Segment Fault

注意:#include <assert.h> int stringlength(const char* s) { assert(s != NULL); int i; for (i = 0; s[i]; ++i); return i; } s,但不是const char *

答案 3 :(得分:-1)

我建议使用指针算术。

首先,处理NULL情况(空字符串,因此只获得空终止符)。否则,迭代指针并递增计数器。然后,只需返回该计数器。

int stringlength(char* s)
{
   if (!s) return 0;
   int len = 0;

   while (*s++) len++;

   return len;
}

(*s++)的神奇之处是什么? 这相当于*(s ++)!= 0.但是因为++的优先级高于*,所以括号无用。

此外,您可以查看此thread