我有一個函數需要兩個字符串,我想讓我們來比較一下每個字符串的第二個字母。 如何解決這樣的說法:函數需要兩個字符串,要比較第n個字符
if (strncmp(str1 + 1, str2 + 1) != 0) {
...
我得到一個錯誤,指出傳遞參數使得從一個整數的指針不進行強制轉換。
我有一個函數需要兩個字符串,我想讓我們來比較一下每個字符串的第二個字母。 如何解決這樣的說法:函數需要兩個字符串,要比較第n個字符
if (strncmp(str1 + 1, str2 + 1) != 0) {
...
我得到一個錯誤,指出傳遞參數使得從一個整數的指針不進行強制轉換。
如果你想允許的可能性,任何字符串可以比你要比較的位置較小:
/* Return 1 if s1[n] > s2[n], 0 if s1[n] == s2[n], -1 if s1[n] < s2[n].
Return -2 if any of the strings is smaller than n bytes long. */
int compare_nth(const char *s1, const char *s2, size_t n)
{
size_t i;
for (i=0; i < n; ++i)
if (s1[i] == 0 || s2[i] == 0)
return -2;
if (s1[n] < s2[n])
return -1;
else if (s1[n] > s2[n])
return 1;
else
return 0;
}
然後,做一些事情時,n
個字符是相等的,你可以這樣做:
if (compare_nth(s1, s2, n) == 0) {
/* do whatever you want to do here */
}
如果你肯定知道有至少n
字符在每個字符串,你可以做別人說:
if (s1[n] == s2[n]) {
/* do whatever you want to do here */
}
(注:因爲索引中的C是0,n
在同一意義上使用這裏。因此,要測試第二個字符,n
將是1
。)
這不是'strncmp'的順利使用,順便說一句。還有第三個參數'size_t n',它決定了你應該比較多長。在這種情況下,您可以簡單地使用'=='比較字符本身。 – 2011-04-16 03:08:23
糟糕,我忘了把「1」作爲第三個參數。 – hut123 2011-04-16 03:10:29