輸入字串,統計其中不同 ASCII 字元 (0~127) 的個數,超出範圍不計入。
for (int k = 0; k < i; k++) {
p = 0;
if (str[k] == str[i]) p = 1;
// 缺少 break!發現重複後仍繼續比較,p 可能被後續不同字元覆蓋為 0
}
導致重複字元未被正確標記,統計結果偏大 (範例輸出 33 vs 正確 24)。
int countUniqueChars(const string& str) {
bool seen[128] = {false}; // ASCII 0-127 直接寻址,O(1) 查重
int count = 0;
for (char c : str) {
unsigned char uc = static_cast(c); // 避免負值索引
if (uc <= 127 && !seen[uc]) {
seen[uc] = true;
count++;
}
}
return count;
}
輸入 uqic^g`(s&jnl(m#vt!onwdj(ru+os&wx,輸出 24,符合預期。