[問題] 關於c++字串反轉的問題

看板C_and_CPP作者 (86)時間14年前 (2010/06/09 22:09), 編輯推噓5(5022)
留言27則, 6人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 如標題,希望能做到例如: 輸入ABC-->輸出CBA 這樣的效果 題目已做出來,但是今天在上課的時候有朋友說可以使用ptr來指定位置做更改 有問題的code: 我試了一下之後打出下列的code int reverse(char *data) { cout<<data<<endl; char *ptr; ptr = &data[SIZE-1]; for(int i=SIZE;i>0;i--) { cout<<*ptr<<endl; ptr -= 1; } cout<<endl; } 程式跑出來的錯誤結果: abcde |C edcba 不知道為什麼在結果跑出來之前都會有一段亂碼 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) DEV-C++ 4.9.9.2 補充說明: 剛剛在爬文的時候有看到有人提到說 C++的話可以使用reverse此函數 google一下之後只有看到類似下面的指令 reverse(data.begin(), data.end()); 但是軟體不讓我compile 補上錯誤訊息:( request for member 'begin' in 'data', which is of non-class type 'char[10]' ) 有大大能順便補充一下或是給我一點提示嗎 感謝各位了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.242.187.147

06/09 22:13, , 1F
您的 SIZE 大小是怎麼來的呢?
06/09 22:13, 1F

06/09 22:14, , 2F
在上面已經 #define SIZE 10了
06/09 22:14, 2F

06/09 22:15, , 3F
XD
06/09 22:15, 3F

06/09 22:15, , 4F
有亂碼通常表示你指錯位置了
06/09 22:15, 4F

06/09 22:15, , 5F
沒把全部的PO出來是怕太花~ 會不好看懂 有需要的話說一聲~
06/09 22:15, 5F

06/09 22:15, , 6F
看你的結果 似乎只有5個字元
06/09 22:15, 6F

06/09 22:15, , 7F
abcde <== 顯然不到10個字
06/09 22:15, 7F

06/09 22:16, , 8F
為什麼從10-1開始印呢?? 你的字傳長度也沒到10呀:)
06/09 22:16, 8F

06/09 22:16, , 9F
你從第10個PRINT出來 當然會是不可預期的結果
06/09 22:16, 9F

06/09 22:16, , 10F
ptr = &data[SIZE-1] 這樣應該是跳過最後那個\0沒錯吧?
06/09 22:16, 10F

06/09 22:17, , 11F
reverse 是用在 C++ 容器上面的函式, 字串是使用
06/09 22:17, 11F

06/09 22:17, , 12F
喔喔@@ 我修改一下 感謝各位
06/09 22:17, 12F

06/09 22:17, , 13F
仔細想想看你的 data[0] 至 data[9] 存的是什麼東西
06/09 22:17, 13F

06/09 22:18, , 14F
你的寫法是把 data[0] 至 data[8] 給倒過來了...XD
06/09 22:18, 14F

06/09 22:18, , 15F
string 類別, 單純只是反著印可以用 reverse_iterator
06/09 22:18, 15F

06/09 22:18, , 16F
但是軟體不讓我compile <== 至於這個,請先貼上錯誤訊息
06/09 22:18, 16F
※ 編輯: kccs 來自: 60.242.187.147 (06/09 22:21)

06/09 22:19, , 17F
reverse 確實可以用在 char[],不過要用對...XD
06/09 22:19, 17F

06/09 22:21, , 18F
抱歉~ 錯誤訊息補上去了
06/09 22:21, 18F

06/09 22:27, , 19F
對吼,忘記有指標版的> <
06/09 22:27, 19F
※ 編輯: kccs 來自: 60.242.187.147 (06/09 22:28)

06/09 22:29, , 20F
char t[] = "abc"; reverse(&t[0], &t[strlen(t)]);
06/09 22:29, 20F

06/09 22:29, , 21F
(覺得丟答案不太好,不過臨時找不到什麼資料 orz)
06/09 22:29, 21F

06/09 22:30, , 22F
string data; reverse(data.begin(), data.end());
06/09 22:30, 22F

06/09 22:31, , 23F
感謝了! 我會再去找找多的資料來看
06/09 22:31, 23F

06/09 22:32, , 24F
string 的賦值可以看這邊 http://tinyurl.com/27fstzy
06/09 22:32, 24F

06/09 22:36, , 25F
嗯嗯 感謝
06/09 22:36, 25F

06/09 22:39, , 26F
有成功用出來了 謝謝上面所有幫忙的人
06/09 22:39, 26F

06/10 04:08, , 27F
reverse(t, t+10);
06/10 04:08, 27F
文章代碼(AID): #1C3w2Fgq (C_and_CPP)