首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

字符串最長連續字符統計:C語言單遍歷算法設計與測試

     編輯:關於C語言

字符串最長連續字符統計:C語言單遍歷算法設計與測試

問題描述

輸入一字串,找出連續出現次數最多的字符及其次數。
例:"123444445" → '4' 連續 5 次;"abcddef" → 'd' 連續 2 次;"ab" → 'a' 連續 1 次(首字符優先)。

算法流程

  1. 掃描字串,維護 cur_char、cur_len、max_char、max_len。
  2. 若當前字符 == cur_char:cur_len++。
  3. 否則:若 cur_len > max_len 更新最大值;重置 cur_char、cur_len=1。
  4. 掃描結束後再比較一次最後一段。

時間 O(n),空間 O(1)。

完整代碼


#include 
#include 
#include 

#define MAX_LEN 1024

int main() {
    char str[MAX_LEN];
    printf("Please input the string:\n");
    if (!fgets(str, MAX_LEN, stdin)) return 0;
    str[strcspn(str, "\n")] = '\0'; // 去換行

    // 簡易中文檢測:若含非 ASCII 字符則報錯
    for (int i=0; str[i]; i++)
        if (str[i] & 0x80) { printf("Has Chinese character, please check!\n"); return 0; }

    char max_char = str[0], cur_char = str[0];
    int max_len = 1, cur_len = 1;

    for (int i = 1; str[i]; i++) {
        if (str[i] == cur_char) cur_len++;
        else {
            if (cur_len > max_len) { max_len = cur_len; max_char = cur_char; }
            cur_char = str[i]; cur_len = 1;
        }
    }
    if (cur_len > max_len) { max_len = cur_len; max_char = cur_char; }

    printf("InputStr=%s\n", str);
    printf("連續出現次數最多的字符是: %c\n", max_char);
    printf("連續出現的次數是: %d\n", max_len);
    return 0;
}

測試用例與輸出

輸入輸出字符次數說明
ababbbab3中間 bbb
12332132中間 33
!@##$%#2特殊字符同樣處理
abcdefa1無重複,首字符勝出
我們123——檢測到中文,報錯退出

需求擴展方向

  1. 忽略大小寫:掃描前統一 tolower(),或比較時 tolower(a)==tolower(b)。
  2. 支援 Unicode/中文:改用 UTF-8 解碼逐碼點遍歷,或引入 ICU 庫。
  3. 輸出所有並列最大字符:用鏈表/陣列記錄所有 len==max_len 的字符。

總結

單次遍歷即可解決,關鍵在「段界處理」與「末段補檢」。代碼簡潔、無庫依賴,適合嵌入式/面試現場寫作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved