自定义函数实现字符串相关库函数

功能(自定义实现相关库函数):

1.输入字符串

2.输出(打印)字符串

3.返回字符串的长度

4.查找特定字符在字符串中第一次出现的地址

5.查找特定字符在字符串中最后一次出现的地址

6.比较两个字符串的大小

7.查找字符串中的特定子串

8.查找字符串中出现次数最多的字符,把字符第一次出现的地址返回

9.查找字符串中连续出现次数最多的字符,把字符第一次出现的地址返回

10.复制字符串

printf("================================================\n");

printf("a-------输入字符串\n");

printf("b-------打印字符串\n");

printf("c-------返回字符串长度\n");

printf("d-------查找特定字符在字符串中第一次出现的地址\n");

printf("e-------查找特定字符在字符串中最后一次出现的地址\n");

printf("f-------比较两个字符串的大小,返回字符的差值\n");

printf("g-------查找子串在字符串中第一次出现的地址\n");

printf("h-------查找字符串中出现次数最多的字符,把字符第一次出现的地址返回\n");

printf("i-------查找字符串中连续出现次数最多的字符,把字符第一次出现的地址返回\n");

printf("j-------复制字符串\n");

printf("o-------退出\n");

printf("请输入选项\n");

printf("================================================\n");

 

 

​#include<stdio.h>
#include<string.h>
#define N 20

void output(char *pc);//打印
int str_len(char *pc);//求长度
char * str_chr(char *pc,char ch);//找字符第一次出现
char * str_chr2(char *pc,char ch);//找字符最后一次出现
int str_cmp(char *pc,char *ps);//比较字符串
char * str_str(char *pc,char *ps);//查找子串在字符串第一次出现的地址
char * str_chr_max(char *pc);//查找字符串中出现次数最多的字符,并把第一次出现的地址返回
char * str_chr_max_con(char *pc);//查找字符串中连续出现次数最多的字符,并把第一次出现的地址返回
char * str_cpy(char *str,char *pc);//将pc指向的字符串复制到str指向的字符串中
char * str_cat(char *pc,char *ps);//将ps指向的字符串连接到pc指向的字符串中

//子函数:将pc指向的字符串复制到str指向的字符串中
char * str_cpy(char *str,char *pc)
{
	char * str1 = str;
	char * pc1 = pc;
	while(*pc1 != '\0')
	{
		*str1 = *pc1;
		str1++;
		pc1++;
	}
	*str1 = '\0';
	return str;

}

//子函数9:查找字符串中连续出现次数最多的字符,并把第一次出现的地址返回
char * str_chr_max_con(char *pc)
{
	char *pc1 = pc;
	char *str = NULL;
	char *str2 = NULL;
	char *str3 = NULL;
	char ch = '\0';
	char chmax = '\0';
	int count = 0,maxcount = 0;
	while( *pc1 != '\0')
	{
		ch = *pc1;
		str2 = pc1;
		count = 0;
		while(*str2 != '\0')
		{
			str3 = str2;
			while(*str3 == ch)
			{	
				count++;
				str3++;
			}
			str2++;
		}
		if(count > maxcount)
		{
			str = pc1;
			chmax = ch;
			maxcount =count;
		}
		pc1++;
	}
	return str;
}


//子函数8:查找字符串中出现次数最多的字符,并把第一次出现的地址返回
char * str_chr_max(char *pc)
{
	char *pc1 = pc;
	char *str = NULL;
	char *str2 = NULL;
	char ch = '\0';
	char chmax = '\0';
	int count = 0,maxcount = 0;
	while( *pc1 != '\0')
	{
		ch = *pc1;
		str2 = pc1;
		count = 0;
		while(*str2 != '\0')
		{
			if(*str2 == ch)
			{	
				count++;
			}
			str2++;
		}
		if(count > maxcount)
		{
			str = pc1;
			chmax = ch;
			maxcount =count;
		}
		pc1++;
	}
	return str;
}

//子函数7:查找子串在字符串第一次出现的地址
char * str_str(char *pc,char *ps)
{
	int k = 0;
	char *pc1 = pc;
	char *ps1 = ps;
	while(*pc1 != '\0')
	{
		if(*pc1 != *ps1)
		{
			pc1++;
		}
		if(*pc1 == *ps1)
		{
			pc1++;
			ps1++;
			if(*ps1 == '\0')
			{
				k == 0;
				break;
			}
			if(*pc1 != *ps1)
			{
				k == 1;
			}
		}
	}
	while(*ps != '\0')
	{
		pc1--;
		ps++;
	}
	if(k == 1)
		return NULL;
	if(k == 0)
		return pc1 ;
}

//子函数4:查找特定字符在字符串中最后次出现的地址
char * str_chr2(char * pc,char ch)
{  
	char * pc1 = pc;
	char * pLast = NULL;
	while ( * pc1 != '\0')
	{
		if( * pc1 == ch)
		{
			pLast = pc1;
		}
		pc1++;
	}
	return pLast;
}

//字符串5:比较字符串
int str_cmp(char *pc,char *ps)
{
	char *pc1 = pc;
	char *ps1 = ps;
	while( *pc1 != '\0' && *ps1 != '\0')
	{
		if(*pc1 == *ps1)
		{
			pc1++;
			ps1++;
		}else
			break;
	}
	return *pc1 - *ps1;
}

//子函数1:打印字符串的长度
void output(char * pc)
{
	char * pc1 = pc;
	while( *pc1 != '\0')
	{
		printf("%c",*pc1);
		pc1++;
	}
	printf("\n");
}
//子函数2:返回字符串的长度
int str_len(char * pc)
{
	char *pc1 = pc;
	int len = 0;
	while(*pc1 != '\0')
	{
		len++;
		pc1++;
	}
	return len;
}

//子函数3:查找特定字符在字符串中第一次出现的地址
char * str_chr(char * pc,char ch)
{  
	char * pc1 = pc;
	char * pFirst = NULL;
	while ( * pc1 != '\0')
	{
		if( * pc1 == ch)
		{
			pFirst = pc1;
			break;
		}
		pc1++;
	}
	return pFirst;
}

void main()
{
	char s[N] = {0};
	char ss[N] = {0};
	char sss[N] = {0};
	char op = '0';
	int len = 0;
	char ch = '\0';
	char *pc = NULL;
	char *ps = NULL;
//	pc = "HelloWorld!";
//	ps = "ll";
	char * strr = NULL;
	int size = 0;
	char *ip = NULL;
	char *j = NULL;

	while(1)
	{
		printf("================================================\n");
		printf("a-------输入字符串\n");
		printf("b-------打印字符串\n");
		printf("c-------返回字符串长度\n");
		printf("d-------查找特定字符在字符串中第一次出现的地址\n");
		printf("e-------查找特定字符在字符串中最后一次出现的地址\n");
		printf("f-------比较两个字符串的大小,返回字符的差值\n");
		printf("g-------查找子串在字符串中第一次出现的地址\n");
		printf("h-------查找字符串中出现次数最多的字符,把字符第一次出现的地址返回\n");
		printf("i-------查找字符串中连续出现次数最多的字符,把字符第一次出现的地址返回\n");
		printf("j-------复制字符串\n");
		printf("o-------退出\n");
		printf("请输入选项\n");
		printf("================================================\n");
		while((op=getchar())=='\n');
		if(op == 'o')
			break;
		switch(op)
		{
			case 'a':getchar();
				printf("请输入字符串\n");
				scanf("%s",s);
				pc = s;
				break;
			case 'b':output(pc);
				break;
			case 'c':len = str_len(pc);
				printf("字符串长度为%d\n",len);
				break;
			case 'd':getchar( );
				printf("请输入要查找的字符\n");
				scanf("%c",&ch);
				strr = str_chr(pc,ch);
				if (NULL == strr)
					printf("未找到该字符\n");
				else
					output(strr);
				break;
			case 'e':getchar( );
				printf("请输入要查找的字符\n");
				scanf("%c",&ch);
				strr = str_chr2(pc,ch);
				if (NULL == strr)
					printf("未找到该字符\n");
				else
					output(strr);
				break;
			case 'f':getchar();
				printf("请输入字符串ps\n");
				scanf("%s",ss);
				ps = ss;
				size = str_cmp(pc,ps);
				if(size > 0)
					printf("pc > ps\n");
				if(size < 0)
					printf("pc < ps\n");
				if(size == 0)
					printf("pc == ps\n");
				break;
			case 'g':getchar();
				printf("请输入要查找的子串\n");
				scanf("%s",ss);
				ps = ss;
				ip = str_str(pc,ps);
				if(ip == NULL)
					printf("未找到!\n");
				else if(ip != NULL)
					output(ip);
				break;
			case 'h': 
				ip = str_chr_max(pc);
				output(ip);
				break;
			case 'i': ip = str_chr_max_con(pc);
				output(ip);
				break;
			case 'j':j = str_cpy(sss,pc);
				 printf("%s\n",j);
				 break;
		}


	}
}​

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值