「回文」指的是乙個字串從前往後讀和從後往前讀都是一樣的,則稱這個字串為回文。比如「qwerewq」是乙個回文字串,「gda534」則不是回文串。在資料結構中,可以通過使用「棧『這種資料結構來實現,這裡單從c語言的語法層面上來實現它。
這裡需要明確一下,上面一會用下標引用的方式訪問字串,一會又用指標訪問,其實指標也可以使用下標引用的方式:#include
#include
#include
#include
#pragma warning(disable:4996)
//回文判斷
//初始化字串,其實這一步可以完全不要
#if 0
void
init
(char
*array)
}#endif
//先計算字串的長度
//其實可以呼叫庫函式
//自己實現也可以
intgetstringsize
(char
*array)
這種方法比較笨,需要遍歷整個字串
但是我們知道字串後面都有乙個『\0』
那就不用整個的遍歷整個字串了
}*/while
(*array)
//也可以直接呼叫庫函式,庫函式也跟上面這麼寫的差不多
//但是更簡單
//自己練習一下
return count;
}int
ispalin
(char
*array,
int size)
left++;
right--;
}*///也可以用指標完成
char
*left = array;
char
*right = left + size -1;
while
(left <= right)
else
}return1;
}int
main()
else
system
("pause");
return0;
}
兩種方式都可以實現,那麼這是不是一樣的呢?也就是說指標和陣列有什麼關係呢?比如array[i]也可以寫成*array[i]
//但是一般不這麼寫
答案是不一樣,指標和陣列沒有關係。指標是指標,陣列是陣列,而這裡需要引出乙個概念:陣列在進行引數傳遞時發生降維,降維為其內部型別的指標。而不是發生引數的值拷貝。而且只有陣列傳參時會發生降維
整型陣列傳參時降維為整型型別的指標int*
字元陣列傳參時降維為字元型別指標char*
。。。所以有時候寫函式的引數的時候有時候寫成(int arr)
有時候寫成(int *arr),其實是一樣的
上面的形參其實是個指標,不信可以做個測試:
這裡只是說他們的引用方式是一樣的,而陣列和指標其實是沒有關係的,要分清楚一點。至於為什麼是這樣以及更多的疑問以後有機會再說。這裡只是為了不混淆。#include
intgetsize
(int arr)
intmain()
;int size =
sizeof
(arr)
;//看arr占多大空間
int sizeof_arr =
getsize
(arr)
;//可以看看兩個數是不是一樣大
return0;
}
判斷回文字串
遞迴入門 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的。比如 level aaabbaaa 題目 判斷乙個字串是否為回文 解法 遞迴 遞迴的作用在於把問題的規模不斷縮少,直到問題縮少到能簡單地解決 問 如何縮少問題規模?答 通過觀察可以知道,乙個回文字串其中內部也是回文。所以,我們...
判斷回文字串
本題要求編寫函式,判斷給定的一串字元是否為 回文 所謂 回文 是指順讀和倒讀都一樣的字串。如 xyzyx 和 xyzzyx 都是回文。bool palindrome char s 函式palindrome判斷輸入字串char s是否為回文。若是則返回true,否則返回false。include in...
回文字串判斷
問題描述 回文字串指的是乙個順著讀和反過來讀都一樣的字串,比如 abcba poop 等,判斷乙個字串是否是回文字串。這裡提供兩種解法 解法一 同時從字串頭尾開始向中間掃瞄字串,如果所有頭尾字元都一樣,那麼這個字串就是乙個回文字串。採用這種方法,只需要維護頭部和尾部兩個掃瞄指標即可,終止條件是尾指標...