杭電acm2026 Problem Description輸入一個英文句子,將每個單詞的第一個字母改成大寫字母.Inpu

題目:

杭電acm2026
Problem Description
輸入一個英文句子,將每個單詞的第一個字母改成大寫字母.
Input
輸入數據包含多個測試實例,每個測試實例是一個長度不超過100的英文句子,占一行.
Output
請輸出按照要求改寫後的英文句子.
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
我的代碼:
#include
int main(void)
{
char str[100],*p;
while(gets(str)!=NULL)
{
p=str;
*p=*p-32;
while(*p++!=NULL)
{
\x05 if(*(p-1)==' ')
\x05\x05 *p=*p-32;
}
while(*p!=NULL)
printf("%c",*p++);
printf("\n");
p=0;
}
return 0;
}
出錯原因:輸出的是亂碼
修改最後輸出語句後
代碼變爲
#include
int main(void)
{
char str[100],*p;
while(gets(str)!=NULL)
{
p=str;
*p=*p-32;
while(*p++!=NULL)
{
\x05 if(*(p-1)==' ')
\x05\x05 *p=*p-32;
}
printf(「%s\n」,str);
p=0;
}
return 0;
}
這樣就正確了
我想知道我第一個代碼哪裡出錯 爲什麼出現亂碼.

解答:

因爲while(*p++!=NULL)當*p=NULL時,循環結束然後p=p+1;
接著運行while(*p!=NULL) *p已經不再str數組中他的值是不定的
所以會亂碼
再問: 那怎麼修改 我不想用第二個輸出 我想用第一個輸出的方法
再答: p=str; 加一個 對了我得提醒一下, 你的*p++改成*(p++)這樣增加可讀性,就不用讓我去查優先級和結合方向了

添加新評論

暱稱
郵箱
網站