处理字符串函数的实现


前言

下面我会给大家介绍一些字符串函数的实现。

一、字符串左旋问题

示例:cdefab是abcdef左旋得到的。
代码如下(示例):

#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;
} 

思路:字符串一自己给自己追加变成abcdefabcedf,再用strstr判断cdefad是不是变化的字符串的子串。
注意:strcat在Visual Studio上字符串自己不能给自己追加,但是在dev c++可以。
为了保险起见自己给自己追加用strncat后加字符串的长度。

二、strlen函数的实现

函数原型:

size_t __cdecl strlen(const char *_Str);

代码如下(示例):

#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
 } 

三、strcpy函数的实现

函数原型:

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

代码如下(示例):

#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);
	
}

四、strcat函数的实现

函数原型:

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

代码如下(示例):

#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);
}

五、strcmp函数的实现

函数原型:

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

代码如下(示例):

#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。");
	}
 } 

总结

以上就是今天要讲的内容,本文仅仅简单介绍了一些字符串操作函数的使用,还有很多函数可以在cplusplus上查找并使用。

猜你喜欢

转载自blog.csdn.net/qq_52208569/article/details/111143875