1、计算一个字符串中最大的重复子串的字符的数量
/*******************************************************************
*
* name : CalSubStrMaxCnt
* function : 计算一个字符串中最大的重复子串的字符的数量
* argument :
* @str:需要查找的字符串的地址
*
* retval : 函数调用成功则返回最大子串的字符数量
* author : [email protected]
* date : 2024/05/01
* note : None
*
* *****************************************************************/
int CalSubStrMaxCnt(const char *str)
{
if(NULL == str)
{
printf("argument is invaild\n");
return -1;
}
int cnt = 1; //计数器用于记录相同字符的数量,都不连续则返回值为1
int max = 0;
//循环判断字符,当遇到'\0'则表达到达字符串末尾,此时可以终止循环
while(*str != '\0')
{
//判断当前的字符和下一个字符的ASCII是否相同
if(*str == *(str+1))
{
cnt++;
}
else
{
max = (max < cnt) ? cnt : max;
cnt = 1;
}
str++;
}
//当终止循环时,则把最大值返回
return max;
}
2、实现字符串的拷贝(不调用库函数的情况下)
/*******************************************************************
*
* name : MyStrcpy
* function : 实现字符串的拷贝(不调用库函数的情况下)
* argument :
* @str_src :需要拷贝字符串的地址
* @str_dest:待拷贝的目标空间的地址
*
* retval : 函数调用成功则返回目标空间的地址
* author : [email protected]
* date : 2024/05/01
* note : None
*
* *****************************************************************/
char * MyStrcpy(const char *str_src,char *str_dest)
{
//循环的把str_src字符串的每个字符进行赋值,赋值到str_dest地址下
while(*str_src != '\0')
{
//如果没有到达字符串末尾,则把字符串的字符按照顺序依次赋值
*str_dest = *str_src++;
str_dest++;
}
//包含了'\0'
*str_dest = '\0';
return str_dest;
}
3、实现字符串的比较(不调用库函数的情况下)
/*******************************************************************
*
* name : MyStrcmp
* function : 实现字符串的比较(不调用库函数的情况下)
* argument :
* @str1 :需要比较的第一个字符串的地址
* @str2 :需要比较的第二个字符串的地址
*
* retval : 两个字符串相同则返回0,如果不相同则返回1
* author : [email protected]
* date : 2024/05/01
* note : None
*
* *****************************************************************/
int MyStrcmp(const char *str1,const char *str2)
{
//循环的比较两个字符串的字符ASCII码是否相等
while( *str1++ == *str2++ )
{
if (*str1 == '\0' && *str2 == '\0')
{
return 1;
}
}
return 0;
}
4、实现把一个char组成的字符串循环右移n个
/*******************************************************************
*
* name : StrRightShift
* function : 实现把一个char组成的字符串循环右移n个。
* argument :
* @str :需要右移的字符串的地址
* @n :需要右移的位数
*
* retval : 调用成功返回移位的字符串的首地址
* author : [email protected]
* date : 2024/05/01
* note : 原来是"abcdefghi" 如果n=2,移位后应该是"hiabcdefg"
*
* *****************************************************************/
char * StrRightShift(const char *str,int n)
{
//计算字符的实际长度
int cnt = strlen(str);
//printf("string cnt = %d\n",cnt);
//给字符串的字符申请内存
char *p = (char *)malloc(cnt);
//把输入的字符串中的字符备份到堆内存
strcpy(p,str);
char temp = 0; //存储要移位的字符
//循环进行字符的移位
for (int i = 0; i < n; ++i)
{
temp = *(p + cnt - 1);
printf("temp = %c\n",temp);
for (int j = cnt - 2; j >= 0; j--)
{
*(p+j+1)= *(p+j);
}
*p = temp;
}
//输出移位后的字符串
printf("string is %s\n",str);
printf("string is %s\n",p);
return p;
}
5、实现将一个输入的字符串进行逆序
/********************************************************************
*
* name : StrReverse
* function : 实现将一个输入的字符串进行逆序
* argument :
* @str :需要逆序的字符串的地址
*
* retval : 调用成功返回逆序之后的字符串的首地址
* author : [email protected]
* date : 2024/05/01
* note : 原来是"helloworld" 逆序后应该是"dlrowolleh"
*
* *****************************************************************/
char *StrReverse(const char *str)
{
char *p = (char *)malloc(128);
int cnt = strlen(str);
for (int i = 0; i < cnt; ++i)
{
*(p+i) = *((str+cnt-1)-i);
}
return p;
}
6、实现将一个输入的字符串进行逆序输出
/********************************************************************
*
* name : StrReverse
* function : 实现将一个输入的字符串进行逆序输出
* argument :
* @str :需要逆序输出的字符串的地址
*
* retval : None
* author : [email protected]
* date : 2024/05/01
* note : 原来是"helloworld" 逆序后应该是"dlrowolleh"
*
* ******************************************************************/
void StrReversePrint(char *ptr)
{
//写好终止条件,防止死循环出现,导致函数频繁调用出现栈溢出现象
if ('\0' == *ptr)
{
return;
}
StrReversePrint(ptr+1);
printf("%c",*ptr);
}
7、递归思想实现一个输入的字符串的实际长度
/********************************************************************
*
* name : StrReverse
* function : 递归思想实现一个输入的字符串的实际长度
* argument :
* @str :需要逆序输出的字符串的地址
*
* retval : 返回计算的字符数量,不包括'\0'
* author : [email protected]
* date : 2024/05/01
* note : None
*
* ******************************************************************/
int MyStrlen(const char *ptr)
{
//写好终止条件,遇到'\0'结束递归,'\0'不计算在内
if ('\0' == *ptr)
{
return 0;
}
else
{
return MyStrlen(ptr+1)+1;
}
}
标签:字符,cnt,int,C语言,char,str,字符串,程序设计
From: https://www.cnblogs.com/banon/p/18169454