2011-04-16 53 views
0

我有一個函數需要兩個字符串,我想讓我們來比較一下每個字符串的第二個字母。 如何解決這樣的說法:函數需要兩個字符串,要比較第n個字符

if (strncmp(str1 + 1, str2 + 1) != 0) { 
... 

我得到一個錯誤,指出傳遞參數使得從一個整數的指針不進行強制轉換。

+1

這不是'strncmp'的順利使用,順便說一句。還有第三個參數'size_t n',它決定了你應該比較多長。在這種情況下,您可以簡單地使用'=='比較字符本身。 – 2011-04-16 03:08:23

+0

糟糕,我忘了把「1」作爲第三個參數。 – hut123 2011-04-16 03:10:29

回答

3
if (str1[1] == str2[1]) { 
    /* Do something */ 
} 
+0

這將是最簡單的方法 – BiGYaN 2011-04-16 04:25:06

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。)