Implementación de simulación de función de cadena
Introducción e implementación de strlen.
strlen
La función es encontrar la longitud de la cuerda. Debido a que la marca de final de la cadena es '\0'
, strlen
se cuenta '\0'
el número de caracteres que aparecieron antes . Además, también debemos tener en cuenta que strlen
el tipo de retorno de la función es size_t
un 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 < 0
se imprimirá en la pantalla <=
, pero en realidad así es >
. Debido a que strlen
se 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_t
número de clase sin signo. Por lo tanto, el resultado de restar dos números -3
se tratará como un número sin signo, que es mayor que 0.
En resumen, strlen
cuando simulamos e implementamos funciones, debemos prestar atención a los siguientes puntos:
- Para obtener correctamente la longitud de una cadena, la cadena debe contener
'\0'
strlen
El 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.
strcpy
La 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í destination
es la cadena de destino, es decir, la cadena en la que queremos copiar la cadena. source
Se 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 const
modificación para evitar errores.
El valor de retorno de esta función es un char*
puntero que apunta a la cadena copiada.
A través de la introducción anterior, strcpy
debemos prestar atención a los siguientes puntos al simular e implementar funciones:
- La cadena de origen debe incluirse
'\0'
y también se'\0'
copiará en el espacio de destino. - Asegúrese de que el espacio de destino sea lo suficientemente grande para contener los datos copiados.
- Asegúrese de que el espacio de destino se pueda modificar
#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;
}