[問題] 指標指向字串,要如何選擇單一字元?

看板C_and_CPP作者 (峰)時間16年前 (2010/01/18 20:05), 編輯推噓11(11011)
留言22則, 11人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: 宣告char *ptr="We are best friends.";, 要如何將每個字元表示出來?*[m 希望得到的正確結果: 希望能夠一個字元一個字元檢驗是否為小寫字母。 開發平台:Dev-C++, Windows Vista 有問題的code: printf("(b) 試撰寫一程式,計算小寫字母的字元數。\n\n"); int n2=0; for(i=0;i<20;i++) if(97<=*(ptr+i)<=122) n2++; printf("總共有%d個小寫字元\n\n\n\n",n2); 補充說明: 我曉得*(ptr+i),而i從0跑到19的話,會使得整個字串遞減, 也就是會變成: We are best friends. e are best friends. are best friends. . . . etc 但是我想要讓他掃描每一個字元,判定該字元是否是小寫, 用指標該如何做到呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.167.16 ※ 編輯: thnestar 來自: 118.165.167.16 (01/18 20:06)

01/18 20:10, , 1F
if(97<=*(ptr+i)<=122) 判斷式沒這種用法吧
01/18 20:10, 1F

01/18 20:24, , 2F
你的補充說明那邊,概念有點問題!
01/18 20:24, 2F

01/18 20:40, , 3F
if(ptr[i]>='a' && ptr[i]<=z) cout << "Y" << endl ;
01/18 20:40, 3F

01/18 20:49, , 4F
^'z'
01/18 20:49, 4F

01/18 20:54, , 5F
while(*str){
01/18 20:54, 5F

01/18 20:54, , 6F
if(*str >= 'a' && *str <= 'z')
01/18 20:54, 6F

01/18 20:54, , 7F
i++;
01/18 20:54, 7F

01/18 20:54, , 8F
str++;
01/18 20:54, 8F

01/18 20:54, , 9F
}
01/18 20:54, 9F

01/18 20:55, , 10F
printf("%d lower cases\n",i);
01/18 20:55, 10F

01/18 20:57, , 11F
*str改*ptr
01/18 20:57, 11F

01/18 21:08, , 12F
其實有現成函式可用,islower
01/18 21:08, 12F

01/18 21:35, , 13F
所以 char *ptr="字串"; 這種宣告我可不可以看成是
01/18 21:35, 13F

01/18 21:36, , 14F
ptr[]="字串"; 這樣呢?
01/18 21:36, 14F

01/18 21:38, , 15F
基本上相同 不過 *ptr 不可修改 ptr[] 可修改
01/18 21:38, 15F

01/19 03:27, , 16F
其實字串就是一個一維陣列啊....
01/19 03:27, 16F

01/19 08:06, , 17F
字串不是陣列, 是一連串資料以 0 結尾
01/19 08:06, 17F

01/19 11:57, , 18F
字串是一維陣列吧?然後以null或者是/0結尾,說0怪怪的
01/19 11:57, 18F

01/19 12:01, , 19F
我用 0 結尾跟用 \0 結尾是同樣效果
01/19 12:01, 19F

01/19 12:05, , 20F
那這樣ab05678,字串不就只會印ab?因為結尾了....
01/19 12:05, 20F

01/19 12:07, , 21F
數字的0跟\0(NULL),在ASCII上也不一樣
01/19 12:07, 21F

01/19 13:45, , 22F
看你把 0 當作 數值 還是 文字 來看, 他說的也不算錯吧?
01/19 13:45, 22F
文章代碼(AID): #1BL4wQyP (C_and_CPP)