查看單個文章
  #1  
舊 2014-05-27, 04:49 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,015
預設 C語言的指標問題請教

題目是,輸入一句英文,然後用指標的方法去寫,將全句分別改成全大寫和全小寫。

寫法如下:
引用:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char str[80];
char *p;

printf("enter a sentence:\n");
gets(str);
p=str;

while(*p)
{
*p=toupper(*p);
p++;
}

printf("%s\n",str);

p=str;/*reset p */
while(*p)
{
*p=tolower(*p);
p++;
}
printf("%s\n",str);
return 0;
}
我有二點疑問請教一下先進:
一是條件判斷的while(*p),我知道這表示如果*p為真,亦即*p不是0的話,該式就繼續下去。但字串陣列最後一個應是null,它的值就是0嗎?其他地方的值不會有0嗎?

二是第二個的p=str;/*reset p */,註解說是要reset p,為什麼要reset呢?我試過不reset p,直接用上面已經toupper(*p)之後直接 tolower(*p),結果確實就不印出小寫,而還是和上面一樣全部大寫。

可是根據我目前的想法,既然toupper() tolower()函式都是把字母變大寫或小寫,那麼假設這一句英文 Hello, World. 經過 toupper會變成 HELLO,WORLD.,然後我再直接把它 tolower(),應該也就變成 hello,world.,不是嗎?

thanks
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章