網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論
論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具
  #1  
舊 2014-05-27, 04:49 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設 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
回覆時引用此篇文章
  #2  
舊 2014-05-27, 10:31 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

一、while(*p) 是判断字串是否到结束了,如果没有结束,就为真;若结束了,就为假。
二、如果不重置p=str的话,那么下面的while(*p)就是假的,根本进不了,也无法调用*p=tolower(*p)了。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #3  
舊 2014-05-27, 10:39 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設

引用:
作者: yumi 查看文章
一、while(*p) 是判断字串是否到结束了,如果没有结束,就为真;若结束了,就为假。
二、如果不重置p=str的话,那么下面的while(*p)就是假的,根本进不了,也无法调用*p=tolower(*p)了。
many thanks, 本來還想不太通,後來想得有點通了。

就是說,第一個while(*p)之後p++一直跑到盡頭了,此時如果再來一個while(*p)就等於是承接了剛才已跑到頭的p++的結果,自然就不會再跑一次。所以要再重置一次p=str。是這樣吧?

十分感謝。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #4  
舊 2014-05-28, 12:50 AM
robowang robowang 目前離線
進階會員
 
註冊日期: 2004-05-22
文章: 372
預設

C 語言的指標, 常讓初學者摸不著頭緒, 或似懂非懂
C 語言本身也是較低階的語言, 其實不是很適合初學者, 特別是年長的初學者
我覺得如果要學程式設計, 或許可以考慮選擇別種高階語言來入門, 如 VB 或 Pascal 等等,
這樣比較容易, 也比較會有成就感
回覆時引用此篇文章
  #5  
舊 2014-05-28, 01:03 AM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設

引用:
作者: robowang 查看文章
C 語言本身也是較低階的語言, 其實不是很適合初學者, 特別是年長的初學者
我覺得如果要學程式設計, 或許可以考慮選擇別種高階語言來入門, 如 VB 或 Pascal 等等,
這樣比較容易, 也比較會有成就感


我本來就是要練習腦力不要太早老年痴呆的,所以沒有學習時間上的壓力,反正學一點是一點。對中老人來說,其實這些語言都不簡單學。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #6  
舊 2014-06-11, 04:33 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設

這個問題還有新的疑問請教一下。
引用:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char str[80],*p;
printf("enter a sentence:\n");
gets(str);
p=str;

while(*p)
{
*p=toupper(*p);
p++;
}
printf("%s\n",str);

return 0;
}
請問為何p=str和p=&str有何不同呢?我改成p=&str之後,程式得到的結果是一樣的。
再者下面,p++,我改成*p++,得出來的答案也是相同的。
而我個人目前的理解是,p=&str以及下面的*p++比較合乎所學的規則,只是不知答案雖一樣,但是否隱含什麼不可知的錯誤呢?

thanks
__________________
咖啡走路
微博


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


發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 01:44 AM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.