字符串处理算法最长连续字符及其出现次数的算法设计及C代码实现

Posted 周兆熊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串处理算法最长连续字符及其出现次数的算法设计及C代码实现相关的知识,希望对你有一定的参考价值。

一、需求描述

输入一个字符串,编写程序找出这个字符串中的最长连续字符,并求出其连续出现的次数。

例如,“123444445”中的最长连续字符是4,其连续出现的次数为5;“abcddef”中的最长连续字符是d,其连续出现的次数为2;“ab”中的最长连续字符是a,其连续出现的次数为1。

 

二、算法设计

我们可以采取逐个比较字符串中各个字符的办法来获取最长连续字符及其连续出现的次数。程序的总体流程如图1所示。

图1 程序的总体流程

 

三、特殊流程考虑

在编写程序的过程中,我们要对输入的字符串的长度及格式多做考虑,如:

1.如果输入的字符串中含有空格,那么我们只处理空格之前的字符串。

2.输入的字符串中可以包含数字、字母及一些特殊的字符,但不能包含中文字符。

 

四、程序代码

 

/**********************************************************************
* 版权所有 (C)2016, Zhou Zhaoxiong。
*
* 文件名称: LongestContinChars.c
* 文件标识: 无
* 内容摘要: 寻找一个字符串中最长连续字符及其个数
* 其它说明: 例如, "aabbbc"的最长连续字符为b, 个数为3
* 当前版本: V1.0
* 作    者: Zhou Zhaoxiong
* 完成日期: 20160316
*
**********************************************************************/
#include 
    
     

// 重新定义数据类型
typedef signed   char  INT8;
typedef          int   INT32;
typedef unsigned int   UINT32;

// 函数声明
void GetLongestContinChars(INT8 *pszInputStr);


/**********************************************************************
* 功能描述: 主函数
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 0-执行成功   其它-执行失败
* 其它说明: 无
* 修改日期        版本号     修改人            修改内容
* ---------------------------------------------------------------------
* 20160316        V1.0     Zhou Zhaoxiong        创建
***********************************************************************/
INT32 main()
{
    INT8   szInputStr[100] = {0};
    UINT32 iPosFlag        = 0;
    
    printf("Please input the string: \\n");
    scanf("%s", szInputStr);
    printf("InputStr=%s\\n", szInputStr);

    // 先判断是否有中文字符
    for (iPosFlag = 0; iPosFlag < strlen(szInputStr); iPosFlag ++)
    {
        if (szInputStr[iPosFlag] < 0)     // 小于0则表示含有中文字符
        {
            printf("%s has Chinese character, please check!\\n", szInputStr);
            return -1;
        }
    }

    // 再调用函数获取最长连续字符及其个数
    GetLongestContinChars(szInputStr);

    return 0;
}


/**********************************************************************
* 功能描述: 获取连续出现次数最多的字符及其连续出现次数
* 输入参数: pszInputStr-输入字符串
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期        版本号     修改人            修改内容
* ---------------------------------------------------------------------
* 20160316        V1.0     Zhou Zhaoxiong        创建
***********************************************************************/
void GetLongestContinChars(INT8 *pszInputStr)
{
    INT8   cCompareChar       = '\\0';
    INT8   cLongestContinChar = '\\0';
    UINT32 iMaxLen            = 1;
    UINT32 iCharCount         = 1;
    UINT32 iPosFlag           = 0;
    
    if (pszInputStr == NULL)
    {
        return;
    }

    cCompareChar       = pszInputStr[0];  // 从第一个字符开始比较
    cLongestContinChar = pszInputStr[0];

    for (iPosFlag = 1; iPosFlag < strlen(pszInputStr); iPosFlag ++) 
    {
        if (pszInputStr[iPosFlag] == cCompareChar) 
        {
            iCharCount ++;     // 对相同字符计数加1
        } 
        else 
        {
            iCharCount   = 1;                       // 字符不同时计数变为1
            cCompareChar = pszInputStr[iPosFlag];   // 重新比较新字符
        }
        
        if (iCharCount > iMaxLen)   // 获取连续出现次数最多的字符及其出现次数
        {
            iMaxLen            = iCharCount;
            cLongestContinChar = pszInputStr[iPosFlag];
        }
    }
 
    printf("连续出现次数最多的字符是: %c\\n连续出现的次数是: %d\\n", cLongestContinChar, iMaxLen);
}

    

以上是关于字符串处理算法最长连续字符及其出现次数的算法设计及C代码实现的主要内容,如果未能解决你的问题,请参考以下文章

1.13.31

31:字符串中最长的连续出现的字符

字符串中最长的连续出现的字符指针练习

算法--字符串:最长回文子序列

去重算法--给出一段英文连续的英文字符窜,找出重复出现次数最多的字母

字符串处理算法删除特定的字符的算法设计及C代码实现