天天看点

c语言之字符串处理函数的实现字符串处理函数

字符串处理函数

1.简介

  • 在c语言的学习过程中,我们会学习很多字符串处理函数,入strlen,strcpy,strcmp等等,使用也特别简单,只需要调用库函数就行。
  • 但是对于c语言初学者来说,作为一个面向过程的语言,了解其函数内的实现过程还非常用必要的。

2.字符串实现函数

strcpy(字符串拷贝函数)

#include <stdio.h>
#define M 50
//指针函数 返回值为指向字符串str1的指针
char *strcpy(char * str1, const char * str2 )
{
	//判断 是否为空指针
	if(str1 == NULL || str2 == NULL)
	{
		return NULL;
	}
	char *p = str1;
	while((* str1++ = * str2++) != '\0');
	return p;
}

int main()
{
	char str1[M]={0};
	char str2[M]={0};
	printf("please input str1\r\n");
	fgets(str1,50,stdin);
	char *p = strcpy(str2,str1);
	puts(str2); 
	return 0;
}
           

运行结果

c语言之字符串处理函数的实现字符串处理函数
注意:fgets输入的时候会将缓存区里面的回车换行

作为笔试题考察点有四处

  1. 异常处理 str1,str2 是否为NULL
  2. const 的修饰,str2不能被修改需要const来修饰
  3. 字符串会拷贝 ‘\0’
  4. 返回值(指向str2的指针),可以方便调用者调用

strcmp(字符串比较大小)

**#include <stdio.h>
#define M 50
#define N 50
int Strcmp(const char *str1,const char *str2);
int main()
{
	//输入两个字符串
	char str1[M]={0};
	char str2[N]={0};
	printf("please input str1\r\n");
	scanf("%s",str1);
	printf("please input str2\r\n");
	scanf("%s",str2);
	//比较两字符串的大小
	Strcmp(str1,str2);
	return 0;
}

int Strcmp(const char *str1,const char *str2)
{
	//判断 是否为空指针
	if(str1 == NULL || str2 == NULL)
 	{
 		 return;
 	}
	int i=0;
	while(*(str1+i)==*(str2+i) && *(str1+i)!='\0')
	{
		i++;
	}
	if( *(str1+i)>*(str2+i) ) 
	{
		printf("str1>str2\r\n");
		return 1;
	}
	else if( *(str1+i) < *(str2+i) )
	{
		printf("str1<str2\r\n");
		return -1;
	}
	else
	{
		printf("str1=str2\r\n");
		return 0;
	}
}
           

运行结果

c语言之字符串处理函数的实现字符串处理函数

作为笔试题考点同上

strcat (字符串拼接函数)

#include <stdio.h>
#include <string.h>
#define M 50
#define N 50
char *str_cat(char*,char*);

int main()
{
	char str1[M]={0};
	char str2[N]={0};
	//输入两个字符串
	printf("please input str1\r\n");
	scanf("%s",str1);
	printf("please input str2\r\n");
	scanf("%s",str2);
	char *p=str_cat(str1,str2);
	puts(p);
	return 0;
}

//字符串拼接
char *str_cat(char *str1,char *str2)
{
	//判断 是否为空指针
	 if(str1 == NULL || str2 == NULL)
  	{
   		 return;
  	}
  	//字符串str1的长度
 	int j=strlen(str1);
 	//字符串str2的长度
 	int k=strlen(str2);
	if( M < (j+k) )
	{
		return ;
	}
	//定义两个指针
	char *pp=str1;
	char *p=str1+j;
	char *q=str2;
	int i=0;
	for(i=0;i<k;i++)
	{
		*(p+i) = *(q+i);
	}
	return pp;
}
           

运行结果

c语言之字符串处理函数的实现字符串处理函数

strlen(求字符串的长度)

#include <stdio.h>
int mystrlen(char *pStr);
int main()
{
	char str[100] ={0};
	printf("please input str\r\n");
	scanf("%s",str);
	//用变量a来接受函数的返回值
	int a=mystrlen(str);
	printf("%d\r\n",a);
	return 0;
}

//求字符串的长度
int mystrlen(char *pStr)
{
	if(NULL==pStr)
	{
		return -1;
	}
	int i=0;
	while(pStr[i] !='\0')
	{
		i++;
	}
	return i;
}
           
c语言之字符串处理函数的实现字符串处理函数
注意:strlen 和 sizeof的区别
  • strlen 计算字符串的长度,不计算字符串的结束标识符 ‘\0’
  • sizeof 计算的是占空间的大小会计算进去

字符串的翻转

**方法一 **

#include <stdio.h>
#include <string.h>
#define n 50

int main()
{
	//输入字符
	char arr[n]={0};
	scanf("%s",arr);
	char *p=arr;
	char *q=&arr[strlen(arr)-1];
	int i=0;
	//用指针p指向首地址,q指向字符的尾地址
	for(i=0;i<strlen(arr)/2;i++)
	{	
		char tmp= *(p+i);
		 *(p+i)=*(q-i);
		 *(q-i)=tmp;
	}
	puts(arr);
	return 0;
}
           
c语言之字符串处理函数的实现字符串处理函数

方法二

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

int main()
{
	char str[100]={0};
	gets(str);
	char *p=str;
	char *q=str+strlen(str)-1;

	while(p<q)
	{
		int tmp=*p;
		*p=*q;
		*q=tmp;
		p++;
		q--;
	}
	puts(str);
	return 0;
}
           

字符串的查找

编写一个字符串查找函数,函数原型为:

char *str_search(const char *str1, const char *str2),

该函数实现在字符串str1中找出字符串str2第一次出现的位置。

如果str2出现在str1中,则返回str2在str1中出现的首地址,

如果在str1中没有与str2匹配的字符串则返回NULL

#include <stdio.h>
#include <string.h>
char *str_search( char *str1, char *str2 );

int main()
{
	//定义两个字符串
	char str1[20] = {0};
	char str2[20] = {0};
	//赋值
	scanf("%s",str1);
	scanf("%s",str2);
	char *q = str_search(str1,str2);
	printf("%s\r\n",q);
	return 0;
}

char *str_search( char *str1, char *str2 )
{
	//定义一个指针指向 str1
	char *p = str1;
	//逐个移动比较
	int i = 0;
	for( i=0; i < strlen(str1); i++ )
	{
		char tmp = *( p+strlen(str2)+i );
		*( p+strlen(str2)+i ) = '\0';
		//比较两个字符串
		if( 0 == strcmp( str1+i, str2 ) )
		{
			return p+i;
		}	
		*( p+strlen(str2)+i ) = tmp;
	}
	return NULL;
}	
           
c语言之字符串处理函数的实现字符串处理函数

继续阅读