[Lenguaje C] Implementación de simulación de función de cadena (1)

Implementación de simulación de función de cadena

Introducción e implementación de strlen.

strlenLa función es encontrar la longitud de la cuerda. Debido a que la marca de final de la cadena es '\0', strlense cuenta '\0'el número de caracteres que aparecieron antes . Además, también debemos tener en cuenta que strlenel tipo de retorno de la función es size_tun tipo, es decir, un entero sin signo, echemos un vistazo al siguiente código:

#include<stdio.h>
#include<string.h>

int main()
{
    
    
     if(strlen("abc") - strlen("abcdef") > 0)
         printf(">\n");
     else
         printf("<=\n");
     return 0;
}

Al ver este fragmento de código, alguien definitivamente dirá que 3 - 6 < 0se imprimirá en la pantalla <=, pero en realidad así es >. Debido a que strlense devuelve un número sin signo, el tipo de resultado de la resta de dos números sin signo también debe ser un size_tnúmero de clase sin signo. Por lo tanto, el resultado de restar dos números -3se tratará como un número sin signo, que es mayor que 0.
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
En resumen, strlencuando simulamos e implementamos funciones, debemos prestar atención a los siguientes puntos:

  1. Para obtener correctamente la longitud de una cadena, la cadena debe contener'\0'
  2. strlenEl tipo de devolución a tener en cuenta essize_t

método uno:

#include<stdio.h>

size_t my_strlen(const char* str)
{
    
    
     size_t count=0; //计数器,统计字符串长度
     assert(str != NULL);
     while(*str != '\0')
     {
    
    
          count++;
          str++;
     }
     return count;
}
int main()
{
    
    
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

Método dos:
Puntero - Puntero -----> Dirección - Dirección: Lo que obtienes es el número de elementos entre el puntero y el puntero:

#include<stdio.h>

size_t my_strlen(const char* str)
{
    
    
     assert(p != NULL);
     char* cur=str;
     while(*cur != '\0')
     {
    
    
          cur++;
     }
     return cur - str;
}
int main()
{
    
    
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

Método tres:
Manera recursiva (no se crean variables temporales)

#include<stdio.h>

size_t my_strlen(const char* str)
{
    
    
     if(*str != '\0')
         return 1+my_strlen(str+1);
     else
         return 0;
}
int main()
{
    
    
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

Introducción e implementación de strcpy.

strcpyLa función esCopiar una cadena a otra cadenaLa función,Al copiar una cadena, también se copiará la marca de final de la cadena '\0'.. Lo que se refiere aquí destinationes la cadena de destino, es decir, la cadena en la que queremos copiar la cadena. sourceSe refiere a la cadena de origen, es decir, la cadena que se debe copiar, debido a que este carácter de origen no necesita ser modificado, utilizamos la constmodificación para evitar errores.
El valor de retorno de esta función es un char*puntero que apunta a la cadena copiada.
Insertar descripción de la imagen aquí
A través de la introducción anterior, strcpydebemos prestar atención a los siguientes puntos al simular e implementar funciones:

  1. La cadena de origen debe incluirse '\0'y también se '\0'copiará en el espacio de destino.
  2. Asegúrese de que el espacio de destino sea lo suficientemente grande para contener los datos copiados.
  3. Asegúrese de que el espacio de destino se pueda modificar
    Insertar descripción de la imagen aquí
#include<stdio.h>
#include<assert.h> 

void my_strcpy(char* dest,const char* src)
{
    
    
    assert(dest && src);
    while(*dest++ = *src++)
    {
    
    
        ;
    }
}
int main()
{
    
    
    char arr1[]="abcdef";
    char arr2[20]={
    
    0};
    my_strcpy(arr1,arr2);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/2301_77404033/article/details/132722989
Recomendado
Clasificación