[問題] 字元陣列還是不懂~"~

看板C_and_CPP (C/C++)作者 (JJ)時間15年前 (2011/05/16 23:54), 編輯推噓1(1052)
留言53則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) c++ 問題(Question): 撰寫一函數void reverse(char str[]),它可以將字串str 反序列印出來。 需用gets輸入與puts輸出 預期的正確結果(Expected Output): 輸入good則的到doog 錯誤結果(Wrong Output): 無法執行。 程式碼(Code):(請善用置底文網頁, 記得排版) #include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include <iostream> using namespace std; void reverse(char); int _tmain(int argc, _TCHAR* argv[]) { char str[15]; cout<<"please input any word :"<<endl; gets(str); for(int i=0;i<15;i++) reverse(str[i]); puts(str); system("pause"); return 0; } void reverse(char str[]) { ...... ...... } 這是我打失敗的... 補充說明(Supplement): 卡在字元陣列不懂,所以函式無從下手... 有任何方法可以在陣列自行輸入後再得知陣列裡面的size嗎? 就是在定義陣列時不給它長度。 還有就是利用函式要將自元陣列放進去,可以一次放進去還是要在主程式打迴圈 讓它一個個丟到函式中? 再補充一個問題:例如說像這個 char *ptr="we are friends" 中要如何知道這一句 話裡有幾個字母? 如果使用sizeof(ptr)的話只會顯示4個字元數...而*ptr.size()也不行 因為條件限制就是要用char>"< ,書都翻爛了...也想了3個小時就這題目...也試不出來 希望高手來指點一下吧~~想到要哭了TAT -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.249.192.19

05/16 23:57, , 1F
幾個字母:使用 strlen(ptr) 就可以得到了
05/16 23:57, 1F

05/16 23:57, , 2F
如果你知道什麼是c-style string的話, 算長度不是難事
05/16 23:57, 2F

05/16 23:57, , 3F
字元陣列 != 字串
05/16 23:57, 3F

05/16 23:58, , 4F
動態記憶體管理,C++:new C:malloc strlen(ptr)
05/16 23:58, 4F

05/17 00:02, , 5F
字元陣列+空字元結尾 = 字串....
05/17 00:02, 5F

05/17 00:04, , 6F
http://pastie.org/1911189 這樣的提示會不會太明顯 XD
05/17 00:04, 6F

05/17 00:09, , 7F
樓樓上非正解 http://goo.gl/RKM1f
05/17 00:09, 7F

05/17 00:25, , 8F
C string is a character sequence terminated with a nul
05/17 00:25, 8F

05/17 00:28, , 9F
而且當他們是字元陣列時才能用strlen呀~~
05/17 00:28, 9F

05/17 00:31, , 10F
感謝james大~請問程式裡的str[15]一定要先給定長度嗎?
05/17 00:31, 10F

05/17 00:32, , 11F
因為現在進度緩慢...很多指令都還沒講...
05/17 00:32, 11F

05/17 00:34, , 12F
love大:如果不用string的話,要將字串裡每個字元都提出
05/17 00:34, 12F

05/17 00:34, , 13F
來才能知道字串長度嗎?
05/17 00:34, 13F

05/17 00:36, , 14F
樓上看得到字元陣列嗎? http://goo.gl/P5u4U
05/17 00:36, 14F

05/17 00:36, , 15F
我是指j大
05/17 00:36, 15F

05/17 00:37, , 16F
可以不用 但需要知道整體的大小...
05/17 00:37, 16F

05/17 00:38, , 17F
自己算的話, 用迴圈去數就可以了
05/17 00:38, 17F

05/17 00:40, , 18F
sequence 講的是內容, 跟陣列毫無關係, 陣列只是有連
05/17 00:40, 18F

05/17 00:40, , 19F
love大:有看到,不過...在不使用strcpy下有辦法嗎?
05/17 00:40, 19F

05/17 00:40, , 20F
用二分搜可以算長度...
05/17 00:40, 20F

05/17 00:40, , 21F
續的記憶體可用, 方便存而已
05/17 00:40, 21F

05/17 00:42, , 22F
也方便找XD
05/17 00:42, 22F

05/17 00:42, , 23F
你是不想呼叫標準庫函式?
05/17 00:42, 23F

05/17 00:43, , 24F
我覺得我的提示白給了 〒△〒
05/17 00:43, 24F

05/17 00:44, , 25F
哀呀...我頭腦比較鈍...
05/17 00:44, 25F

05/17 00:45, , 26F
如果不想用strcpy 那就自己寫吧~~
05/17 00:45, 26F

05/17 00:46, , 27F
還有在函式裡void reverse(char str[]) 裡的[]也沒做過
05/17 00:46, 27F

05/17 00:47, , 28F
我相信你手邊應該有參考書,看看「陣列」相關的章節
05/17 00:47, 28F

05/17 00:48, , 29F
這應該是把書當作字典,只想翻答案吧..你問的書上都有教
05/17 00:48, 29F

05/17 00:48, , 30F
看完了再看「函式傳遞陣列」以及「字串」的相關章節
05/17 00:48, 30F

05/17 00:48, , 31F
只能用 puts 真討厭...用 putchar 的話可以作弊XD
05/17 00:48, 31F

05/17 00:51, , 32F
樓上 那我會用getchar + putchar + 遞迴XD
05/17 00:51, 32F

05/17 00:53, , 33F
好吧...看來要先冷靜的再看一遍了TAT
05/17 00:53, 33F

05/17 00:54, , 34F
感謝各位的建議~~
05/17 00:54, 34F

05/17 00:55, , 35F
要成為像正妹板主那樣的高手,是需要把書看得很熟的
05/17 00:55, 35F

05/17 00:55, , 36F
= ="
05/17 00:55, 36F

05/17 00:56, , 37F
firejox 我說的就是那個啊XD
05/17 00:56, 37F

05/17 01:40, , 38F
我以為你指的是這個http://nopaste.csie.org/28310
05/17 01:40, 38F

05/17 01:48, , 39F
這樣還是要走兩次(來回各一)長度吧, 其實和 strlen 的
05/17 01:48, 39F

05/17 01:48, , 40F
版本沒有差很多 :~
05/17 01:48, 40F

05/17 02:11, , 41F
即使你用遞迴也是會走兩次阿 只不過是stack罷了....
05/17 02:11, 41F

05/18 00:27, , 42F

05/18 10:55, , 43F
之前好像給你建議過,精華區和新手13戒要多看
05/18 10:55, 43F

05/18 10:57, , 44F
gets->請改成fgets(str,15,stdin);不然很容易超出陣列
05/18 10:57, 44F

05/18 10:59, , 45F
範圍,再來就是C的字串其實是字元陣列+'\0'.
05/18 10:59, 45F

05/18 11:00, , 46F
string其實是一個structure.有個成員變數size,用getline
05/18 11:00, 46F

05/18 11:01, , 47F
時,其實已經把字串長度的值給size.因此你有兩種選擇
05/18 11:01, 47F

05/18 11:03, , 48F
直接用strlen算出長度,或是模仿string的做法.只是第一種
05/18 11:03, 48F

05/18 11:04, , 49F
可以解決問題的話,就先用第一種吧.
05/18 11:04, 49F

05/18 11:32, , 50F
還有reverse(str[i]);<=應該改成reverse(str)就好
05/18 11:32, 50F

05/18 11:38, , 51F
還有你可以goole 關鍵字是c 字串反轉 指標.這個就不需要
05/18 11:38, 51F

05/18 11:39, , 52F
字串的長度了
05/18 11:39, 52F

05/18 17:52, , 53F
如果你不知道'\0'在哪裡你要怎麼反轉....
05/18 17:52, 53F
文章代碼(AID): #1DqKY-iW (C_and_CPP)
文章代碼(AID): #1DqKY-iW (C_and_CPP)