Re: [問題] 大家好 關於字串反轉
※ 引述《tobashi ()》之銘言:
: 大家好 今天我想用函數來做字串反轉
: #include <stdio.h>
: #include <string.h>
: void reverse(char* str)
: {
: int i, j;
: char temp;
: for(i=0, j = strlen(str)-1; i<j; ++i, --j)
: temp = str[i], str[i]=str[j], str[j]=temp;
: }
: int main()
: {
: char * str=(char *)malloc(5*sizeof(char));
: *str="12345";
: reverse(str);
: puts(str);
: return 0;
: }
: 每次輸出都是錯誤
: 想請問問題是出在哪呢
: 謝謝
強烈建議初學者一定要學的語言feature: typedef
首先先這樣:
typedef char* String;
型態中如果有 * 出現, 表示它掌握著某種資源,
1) 取得資源透過函式
2) 釋放資源透過函式
3) 任何存取也都透過函式
這是一個規範, 確保你在更高的層面下編程, 思考人類應該思考的問
題, 而不是變成像寫組合語言一樣. 標準函式庫中, 符合上述情形的
剛好就有一個例子(雖然不是很好):
FILE * output = fopen( "output.txt", "w" );
fprintf( output, "hello world\n" );
fclose( output );
for (1) and (2) 我們至少需要兩個函式可以讓 String 變數能像
FILE* 變數有一套標準的操作方法:
String create_string( size_t max_length ) {
String ret = (String)malloc(max_length+1);
return ret[ 0 ] = '\0', ret;
}
void release_string( String target ) {
free( target );
}
在這兩個函式中, 你想要直接當它是 char* 來使用, 或是把 String
當成是未知的型別叫用其他 helper 幫我們完成任務也行. 除此之外
不是屬於上述 (3) 的函式者, 都不該知道它實際上就是 char*.
目前我覺得設計可以朝向 "String 可以和 C-style string 相容",
所以可以添加下面幾個例外:
for 每一個 String 物件 str, 可以允許以下操作:
(1) str[ i ]
取出 str 中第 i 個字元的參考, 字元型別是 char
(2) strcpy( str, "hello" )
將 "hello" 的內容拷貝到 str 中
(3) 像 strlen(), puts() 等可以針對 C-style string 做操
作的標準函式庫函式也可以像對 C-style string 一樣存
取 str
有了上述的幾個規則, 我們往後只要遵循它不要偷吃步, 就可以無
憂無慮的寫程式.
main() 經改寫變成這樣:
int main()
{
String str = create_string( 5 );
strcpy( str, "12345" );
reverse( str );
puts( str );
release_string( str );
return 0;
}
這裡是 reverse() 的程式碼:
void reverse( String str )
{
size_t left = 0, right = strlen(str)-1;
for ( ; left < right; ++left, --right ) {
char temp = str[left];
str[left] = str[right];
str[right] = temp;
}
}
--
儘量不要在程式碼裡出現太多 char, int, double, 或指標等型别, 那
表示你不知道自己處理的問題是什麼, 使用 typedef 取代. 如果想不出
對於這個 typedef 出來的新型態該設計哪些存取用的函式, 那表示你題
目沒看懂要回去再罰看一次.
上面說的這些其實一點也不複雜, 就只是訂了一套規則之後死忠的遵循
它而已, 以後當你要設計一個函式庫的時候, 這還只是基本招保護自己
/別人 免改太多程式碼.
寫完就這樣了, debug 都不用.
--
★ ★ ★ ★
★ ★ ★ ███ ███ █ █▌█ ██◣ ███ ▋▋█ ★ ★ ★
█▂█ █▃█ █ ███ █▆█ █▄█ ███
★ ★ █ ◣ █ █ █ ▋██ █▆◤ ███ ███ ★ ★
Kim Jae Kyung Koh Woo Ri Cho Hyun Young Kim Ji Sook
φwindyhorse No Eul Oh Seung A Jung Yoon Hye
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835 來自: 140.121.221.215 (02/19 01:57)
→
02/19 02:26, , 1F
02/19 02:26, 1F
→
02/19 03:05, , 2F
02/19 03:05, 2F
推
02/19 03:17, , 3F
02/19 03:17, 3F
推
02/19 13:03, , 4F
02/19 13:03, 4F
→
02/19 14:32, , 5F
02/19 14:32, 5F
推
02/19 17:51, , 6F
02/19 17:51, 6F
推
02/19 18:05, , 7F
02/19 18:05, 7F
推
02/19 19:18, , 8F
02/19 19:18, 8F
推
02/19 21:04, , 9F
02/19 21:04, 9F
→
02/19 22:36, , 10F
02/19 22:36, 10F
推
02/19 23:41, , 11F
02/19 23:41, 11F
→
02/20 18:35, , 12F
02/20 18:35, 12F
討論串 (同標題文章)