功能(自定义实现相关库函数):
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;
}
}
}