輸入一字串,找出連續出現次數最多的字符及其次數。
例:"123444445" → '4' 連續 5 次;"abcddef" → 'd' 連續 2 次;"ab" → 'a' 連續 1 次(首字符優先)。
cur_char、cur_len、max_char、max_len。cur_char:cur_len++。cur_len > max_len 更新最大值;重置 cur_char、cur_len=1。時間 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;
}
| 輸入 | 輸出字符 | 次數 | 說明 |
|---|---|---|---|
| ababbba | b | 3 | 中間 bbb |
| 123321 | 3 | 2 | 中間 33 |
| !@##$% | # | 2 | 特殊字符同樣處理 |
| abcdef | a | 1 | 無重複,首字符勝出 |
| 我們123 | — | — | 檢測到中文,報錯退出 |
tolower(),或比較時 tolower(a)==tolower(b)。len==max_len 的字符。單次遍歷即可解決,關鍵在「段界處理」與「末段補檢」。代碼簡潔、無庫依賴,適合嵌入式/面試現場寫作。