Encontrar la longitud de la cadena en C (sin usar strlen)

El código de abajo no imprime nada –

int main() { char *input = "This is a string"; find_length(input); return 0; } void find_length(char *input){ printf("%s", input); int length = 0; while(input[length]!='\0'); { length++; printf("%i", length); } } 

Tienes un punto y coma adicional detrás de tu bucle:

 while(input[length]!='\0'); ^ does not belong here!!! 

Así que está atascado en un bucle infinito. Desaste de eso.


Además, podría haber buffering de flujo. Intenta agregar algunos \n . O llame a fflush(stdout) para vaciar el flujo de salida.

 void find_length(char *input){ printf("%s\n", input); int length = 0; while(input[length]!='\0') // remove ; { length++; printf("%i\n", length); } } 

Sí, pero como no imprime una nueva línea, el búfer no se vacía hasta que el progtwig se cierra, y terminará con un indicador de comandos en la misma línea. Algunas personas tienen indicaciones de shell con retornos de carro, que sobrescribirían la salida del progtwig.

Cambia esto:

 printf("...", ...); 

A esto:

 printf("...\n", ...); 

La siguiente es la solución.

 #include  int main() { char str[100]; printf("Enter a string: "); printf( "\rLength is: %d", printf("Entered string is: %s\n", gets(str)) - 20); return 0; } 

En el progtwig anterior, gets () devuelve la cadena ingresada. Imprimimos la longitud utilizando el primer printf. El segundo printf () llama a gets () e imprime la cadena ingresada usando el valor devuelto de gets (), también imprime 20 caracteres adicionales para imprimir “La cadena ingresada es:” y “\ n”. Es por eso que restamos 20 del valor devuelto de la segunda impresión y obtenemos la longitud.

Incrementa la variable de length o elimina el punto y coma al bucle while.

Tratar,

 void find_length(char *input){ int length = 0; /* declaration */ printf("%s", input); while(input[length++]!='\0'); printf("%i", length); } /* OR */ void find_length(char *input){ int length = 0; while(input[length]!='\0') { length++; } printf("%i", length); } 

Supongo que las otras publicaciones te apuntarán a la respuesta correcta.

Pero solo quiero dejar una nota aquí. Sería bueno si find_length() devuelve la longitud de la cadena ( size_t o también podría ser int ) en lugar de void

OTOH, puedes ver las otras implementaciones de strlen() . ¡Espero eso ayude!

 #include  // array version int strlen1(char a[]) { int len = 0; while (a[len]) len++; return len; } // pointer version // *p++ = dereference the pointer value and then // increment the pointer to the next memory location int strlen2(char *p) { int len = 0; while (*p++) len++; return len; /* int *q = p; while (*p); p++; return pq; */ } int main() { char s[] = "test string"; char *p = "another string"; printf("strlen1(%s) = %d \n", s, strlen1(s)); printf("strlen1(%s) = %d \n", p, strlen1(p)); printf("strlen2(%s) = %d \n", s, strlen2(s)); printf("strlen2(%s) = %d \n", p, strlen2(p)); return 0; } 

Forma fácil de encontrar la longitud de la cadena dada

 int strLength(const char *_array) { int str_len=0; while(*(_array++)) str_len++; return str_len; } 

La pregunta es antigua, pero … ¿por qué te molestas en crear un bucle para obtener la longitud de la cadena, ya que printf puede hacerlo a través del especificador %n :

 #include  int main(int argc, char* argv[]) { char *input = "This is a string"; int length=0; printf("%s%n",input,&length); printf("\nThe length of \"%s\" is %d",input, length); return 0; } 

O incluso puede obtener la salida de la función printf después de imprimir la cadena así:

 length=printf("%s",input); printf("\nThe length of \"%s\" is %d",input, length); 
 C++, Count string without functions #include  #include  using namespace std; int main() { string leng; cout << "Enter String for Count" << endl; cin >> leng; int a = 0; while (leng[a++]); { cout << a; } } 

Esta es tu respuesta: (len será la longitud de la cadena, la cadena es la cadena!)

 int len; for(len=0; string[len]!='\0'; len++); printf("Length of string is %i", len); 
 main(int argc, char *argv[]) { char *input = "Enter Any string"; printf("your Entered String is: %s\n", input); int length = 0; while (input[length] != '\0') { length++; } printf("length is : %i\n", length); }