Re: [問題] if的問題
※ 引述《shimii (溶化了)》之銘言:
: 我想要 if(*p=='a-z'||*p=='A-Z')
: 也就是說只要*p=a-z或是A-Z就會繼續下去做
: 可是我要編譯的時候他卻不給我過
NO,你不可以這樣寫,這是C/C++本身的限制,他語法沒有提供你指定一範圍內的
ASCII Code。
而單引號內也只能擺「一個」字元,像是:
'a' 指小寫a的ASCII碼
'A' 指大寫A的ASCII碼
'8' 指數字8的ASCII碼
',' 這是浮號「,」的ASCII碼
' ' 這是空白字元的ASCII碼。
但你不能寫'a-z'這種寫法。想要比對一個範圍內的ASCII字元,你需要這精美的ASCII碼表
(通常計概書或程設書也會附)
http://en.wikipedia.org/wiki/ASCII
像是你比對「e」ASCII碼我們查到是101,那你能這樣寫(假設你要與一char變數ch比對)
if(ch == 101)
或是
if(ch == 'e')
第一個寫法其實作了些轉換,在C/C++中直接寫數字編譯器會預設為int,而你與一char變
數比較,ch會被往上轉成int型態再作比較,不過這是細節就是。個人推薦第二種寫法,比
較好讀。
如果你想比對一個範圍內的字元,比如說,bcd三個ASCII,b == 98, d == 100,那你可以
這樣寫
if(ch >= 98 && ch <= 100)
或是
if(ch >= 'b' && ch <= 'd')
而像你原題的要求。那會是
if((ch >= 97 && ch <= 122) || (ch >= 65 && ch <= 90))
更易讀的寫法
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <='Z'))
注意在ASCII中,小寫字母的ASCII碼要比大寫字母要「大」
以上是自己寫的作法,C的標準函式庫中有提供一系列撿查ASCII字元的函式
(ctype.h)
: 請問要怎麼改才對呢?
: 還有我想用if比對出特殊字元要怎麼寫?
: 例如問號.逗號.之類的符號
: (空白也算)特殊字元很多..難道要一個一個打嗎= ="?
: 有沒有什麼方法....教一下 謝謝(躬
如果你要比對一組ASCII字碼不相鄰的字碼,真的就只能用一個一個打了(爆)
不過有簡化的作法,比如說自定資料結構與一組函式把你要比對的字元塞進資料
結構中,再用你自己寫的函式去簡查。
如果你有用C++,標準函式庫有提供Set(集合),你可以把你要比對的字元塞進去,
再用其提供的撿查操作去撿查。
: 另外問一下
: 我想在程式中間忽然插一句*p=f;
: 可是他也不給我過
: 還是說一定要在一開始宣告的時候就直接把他指定進去?
: cher *p=f;
你這行的意思是把p指向某變數「f」內容數字的位置。
--
此人使用掉到馬桶的C++ Primer 4ed
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.209.189.4
※ 編輯: doomleika 來自: 210.209.189.4 (04/05 18:30)
推
04/05 18:55, , 1F
04/05 18:55, 1F
→
04/05 19:14, , 2F
04/05 19:14, 2F
→
04/05 19:18, , 3F
04/05 19:18, 3F
→
04/05 19:19, , 4F
04/05 19:19, 4F
推
04/05 19:28, , 5F
04/05 19:28, 5F
→
04/05 19:37, , 6F
04/05 19:37, 6F
char* p是一個指標,我們假設f是char。
程式片段如下
char f = 'X';
char* p = f;
還沒進入程式前:
名稱 型態 值 位置
f char 未初始 未初始
p char* 未初始 未初始
跑到char f = 'X'; //PS, 「0x」開頭的數字是指十六進位
名稱 型態 值 位置
f char 'X'(0x58) 0xA001 //位置可能每次不同
p char* 未初始 未初始
跑到char p = f;
//要說一下,通常到這邊是不會允許的,compiler應該會說
//"Can not convert char to char*"之類的訊息,這是好事,
//如果compiler讓你這樣作,在使用*p時會用到不屬於你程式
//的資料,通常會有「本程式發生錯誤即將關閉」,倒霉一點
//就是程式安靜的取用到不屬於他的資料,然後你會發現你的
//程式行為莫名奇妙,然後debug一兩個小時才發現你犯了個愚
//蠢的錯誤
名稱 型態 值 位置
f char 'X'(0x58) 0xA001
p char* 0x0058 0xA002 //位置每次都可能不同
正常的情況應該是這樣
char f = 'X';
char* p = &f; //注意那個&
還沒進入程式前:
名稱 型態 值 位置
f char 未初始 未初始
p char* 未初始 未初始
跑到char f = 'X'; //PS, 「0x」開頭的數字是指十六進位
名稱 型態 值 位置
f char 'X'(0x58) 0xA001 //位置可能每次不同
p char* 未初始 未初始
跑到char p = &f;
名稱 型態 值 位置
f char 'X'(0x58) 0xA001 //位置可能每次不同
p char* 0xA001 0xA002
^^^^^^^
※ 編輯: doomleika 來自: 210.209.189.4 (04/05 20:02)
推
04/05 20:05, , 7F
04/05 20:05, 7F
→
04/05 20:06, , 8F
04/05 20:06, 8F
推
04/05 20:14, , 9F
04/05 20:14, 9F
→
04/05 20:15, , 10F
04/05 20:15, 10F
→
04/05 20:22, , 11F
04/05 20:22, 11F
推
04/05 20:23, , 12F
04/05 20:23, 12F
推
04/05 20:25, , 13F
04/05 20:25, 13F
推
04/05 20:29, , 14F
04/05 20:29, 14F
→
04/05 21:49, , 15F
04/05 21:49, 15F
推
04/06 16:32, , 16F
04/06 16:32, 16F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章