哈啦
2014-05-27, 04:49 PM
題目是,輸入一句英文,然後用指標的方法去寫,將全句分別改成全大寫和全小寫。
寫法如下:
#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
寫法如下:
#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