La realización de la función de cadena.


Prefacio

A continuación, les presentaré la implementación de algunas funciones de cadena.

Primero, el problema de la cuerda para zurdos

Ejemplo: cdefab es zurdo por abcdef.
El código es el siguiente (ejemplo):

#include<stdio.h>
#include<string.h>
int left_move(char *str1,char *str2)
{
    
    
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	if(len1 != len2)//二个字符串长度不相等,那么它就不是旋转的来,直接就返回0 
	{
    
    
		return 0;
	}
	strncat(str1,str2,6);
	char *ret = strstr(str1,str2);
	if(ret == NULL)
	{
    
    
		return 0;
	}
	else
	{
    
    
		return 1;
	}
}
int main(void)
{
    
    
	char arr1[] = "abcdef";
	char arr2[] = "cdefab";
	int ret = left_move(arr1,arr2);
	if(ret == 1)
	{
    
    
		printf("YES");
	}
	else
	{
    
    
		printf("NO");
	}
	return 0;
} 

Idea: Una vez que la cadena se agrega a sí misma, se convierte en abcdefabcedf, y luego strstr se usa para determinar si cdefad es una subcadena de la cadena cambiada.
Nota: Strcat no puede agregar cadenas a sí mismo en Visual Studio, pero puede hacerlo en dev c ++.
Para estar seguro, agregue la longitud de la cadena después de strncat.

En segundo lugar, la realización de la función strlen

Prototipo de función:

size_t __cdecl strlen(const char *_Str);

El código es el siguiente (ejemplo):

#include<stdio.h>
int my_strlen(char *str)
{
    
    
	int count = 0;
	while(*str !='\0')
	{
    
    
		count++;
		str++;//str++意思是它的地址加一,找到下一个字符的地址。 
	}
	return count;
}
int main(void)
{
    
    
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d",len);
	strlen
 } 

Tres, la realización de la función strcpy

Prototipo de función:

char * __cdecl strcpy(char * __restrict__ _Dest,const char * __restrict__ _Source);

El código es el siguiente (ejemplo):

#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *dest,char *src)
{
    
    
	assert(dest != NULL && src != NULL);//保证传递进来的二个指针都不为空
	char *ret = dest;
	while(*src !='\0')//while循环里可简写成while(*dest++ == *src++) 
	{
    
    
		*dest = *src;
		dest++;
		src++;
	} 
	*dest = *src;//把src最后的'\0'拷贝到dest。 
	return ret;
}
int main(void)
{
    
    
	char arr1[] = "abcedf";
	char arr2[] = "bit";
	my_strcpy(arr1,arr2);
	printf("%s",arr1);
	
}

Cuarto, la realización de la función strcat.

Prototipo de función:

char * __cdecl strcat(char * __restrict__ _Dest,const char * __restrict__ _Source);

El código es el siguiente (ejemplo):

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,char* src)
{
    
    
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;
	while(*dest != '\0')//先找到目的地字符串的'\0',然后将src拷贝到dest。 
	{
    
    
		dest++;
	}
	while(*src !='\0')//while循环里可简写成while(*dest++ == *src++) 
	{
    
    
		*dest = *src;
		dest++;
		src++;
	} 
	*dest = *src;//把src最后的'\0'拷贝到dest。 
	return ret;
}
int main(void)
{
    
    
	char arr1[] = "abc";
	char arr2[] = "def";
	my_strcat(arr1,arr2);
	printf("%s",arr1);
}

Cinco, la realización de la función strcmp

Prototipo de función:

int __cdecl strcmp(const char *_Str1,const char *_Str2);

El código es el siguiente (ejemplo):

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* dest,const char* src)
{
    
    
	assert(dest && src);
	while(*dest == *src)
	{
    
    
		dest++;
		src++;
	}
	if(*dest>*src)
	{
    
    
		return 1;
	}
	else if (*dest<*src)
	{
    
    
		return -1;
	}
	else
	{
    
    
		return 0;
	}
}

int main(void)
{
    
    
	char arr1[] = "abcdef";
	char arr2[] = "abcdez";
	int ret = my_strcmp(arr1,arr2);
	if(ret == 1)
	{
    
    
		printf("字符串1大于字符串2。");
	}
	if(ret == -1)
	{
    
    
		printf("字符串1小于字符串2。");
	}
	if(ret == 0)
	{
    
    
		printf("字符串1等于字符串2。");
	}
 } 

para resumir

De lo anterior es de lo que vamos a hablar hoy Este artículo solo presenta brevemente el uso de algunas funciones de manipulación de cadenas, y hay muchas funciones que se pueden encontrar y usar en cplusplus.

Supongo que te gusta

Origin blog.csdn.net/qq_52208569/article/details/111143875
Recomendado
Clasificación