輸入多行英文句子(每行 ≤100字元),將每個單詞第一個字母轉為大寫,其餘保持不變。
用 flag 標記「下一字元是否為單詞開頭」:
flag=1 (行首視為單詞開頭)flag=1flag=1 → 轉大寫,flag=0flag=0 → 不變#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char s[101];
while (fgets(s, sizeof(s), stdin)) {
int flag = 1;
for (int i = 0; s[i]; i++) {
if (flag && islower(s[i])) s[i] = toupper(s[i]);
flag = (s[i] == ' ');
}
printf("%s", s); // fgets保留換行
}
return 0;
}
fgets 替代不安全的 getsislower/toupper 替代硬編碼 -32,支援非ASCII環境flag = (s[i]==' ') 一行搞定狀態轉移輸入: i like acm 處理: i→I, 空格→flag=1, l→L, 空格→flag=1, a→A 輸出: I Like Acm ✓
flag=1,下一非空格正確大寫islower 判斷避免重複轉換flag (題目隱含單詞以空格分隔)