How to determine the length of a string (without using strlen())

陌路散爱 提交于 2019-12-23 22:28:29

问题


size_t stringlength(const char *s)

Using this function, how could find the length of a string? I am not referring to using strlen(), but creating it. Any help is greatly appreciated.


回答1:


Cycle/iterate through the string, keeping a count. When you hit \0, you have reached the end of your string.

The basic concepts involved are a loop, a conditional (to test for the end of string), maintaining a counter and accessing elements in a sequence of characters.

Note: There are more idiomatic/clever solution. However OP is clearly new to C and programming (no offense intended, we all started out as newbies), so to inflict pointer arithmetic on them as one of solutions did or write perhaps overly terse/compact solutions is less about OP's needs and more about a demonstration of the posters' programming skills :) Intentionally providing suggestions for a simple-to-understand solution earned me at least one downvote (yes, this for "imaginary code" that I didn't even provide. I didn't want to ready-serve a code solution, but let OP figure it out with some guidance).

Main Point: I think answers should always be adjusted to the level the questioner.




回答2:


size_t stringlength(const char *s) {
   size_t count = 0;
   while (*(s++) != '\0') count++;
   return count;
}

The confusing part could be the expression *(s++), here you're moving the pointer to point the next character in the buffer using the ++ operator, then you're using the dereferencing operator * to get the content at the pointer position. Another more legible approach would be:

size_t stringlength(const char *s) {
   size_t count = 0;
   while (s[count] != '\0') count++;
   return count;
}

Another couple of reference versions (but less legible) are:

size_t stringlength(const char *s) {
   size_t count = 0;
   while (*s++) count++;
   return count;
}


size_t stringlength(const char *s) {
   const char* c = s;
   for (; *c; c++);
   return c - s;
}

Although the code stated here is just a reference to give you ideas of how to implement the algorithm described in the above answer, there exists more efficient ways of doing the same requirement (check the glibc implementation for example, that checks 4 bytes at a time)




回答3:


This might not be a relevant code, But I think it worth to know. Since it saves time...

int a[] = {1,2,3,4,5,6};

unsigned int i,j;

i = &a; //returns first address of the array say 100

j = &a+1; //returns last address of the array say 124

int size = (j-i)/sizeof(int); // (j-i) would be 24 and (24/4) would be 6

//assuming integer is of 4 bytes

printf("Size of int array a is :%d\n",size);

And for strings ::

char a[] = "Hello";

unsigned int i,j;

j = &a+1; //returns last address of the array say 106

i = &a; //returns first address of the array say 100


printf("size of string a is : %d\n",(j-i)-1); // (j-i) would be 6

If you are confused how come &a+1 returns the last address of the array, check this link.





回答4:


Assuming s is a non-null pointer, the following function traverses s from its beginning until the terminating zero is found. For each character passed s++; count is incremented count++;.

size_t stringlength(const char *s) {
   size_t count = 0;
   while (*s) {
     s++;
    count++;
   }
   return count;
}


来源:https://stackoverflow.com/questions/11395821/how-to-determine-the-length-of-a-string-without-using-strlen

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!