2010-10-29 28 views
4
int mystery(const char *s1, const char *s2) { 
    for(; *s1 != '\0' && *s2 != '\0'; s1++, s2++) { 
    if(*s1 != *s2) { 
     return 0; 
    } //end if 
    } //end for 
    return 1; 
} 

我知道它有輸入錯誤,但這正是它是如何。 感謝球員我也需要它運行,我已經添加了變量聲明,但我得到編譯器錯誤,說這個函數有什麼作用?

在函數`int main()':
error: a function-definition is not allowed here before '{' token
error: expected
,'或';' '{'token

+3

你問這個幹什麼? – sbi 2010-10-29 17:51:48

回答

11

它比較兩個字符串,如果字符串1以字符串2開頭,則返回1,反之亦然,如果不是則返回0

+0

ahhh你打我:)生病刪除我的答案。 +1快速 – 2010-10-29 17:50:07

+0

比較兩個字符串是否相等。 – 2010-10-29 17:50:09

+5

這是不正確的。 「Foo」和「FooBar」將評估爲1. – 2010-10-29 17:52:37

0

看起來像這個函數在兩個字符串相等時返回1,當它們不相等時返回0。

至少,這可能是這個意圖。

4

如果(s1,s2)中的較短者與較長者的開頭不同,它將返回0。字符串可以有不同的長度,但必須是從另一個字符串開始的子字符串。

編輯。糟糕的是,肖斯打敗了我。在我面前投票給他。

3

是否值得解釋?

for(; *s1 != '\0' && *s2 != '\0'; s1++, s2++) { 

for循環中的第一個元素,在第一個';'之前,是否需要初始設置?
因此,for循環運行時,s1和s2指向的任何一個字符都不爲零。零標記c和C++中字符串的結尾。
for循環的最後一部分是每個循環的額外操作 - 在這種情況下,指針s1和s2將指向每個字符串中的下一個字符。

if(*s1 != *s2) { 
     return 0; 

如果人物在由S1和S2指出是不一樣的 - 即我們發現在這兩個字符串的第一個不同的字符,返回0,也就是假

return 1; 

如果我們得到一個字符串的結尾,我們還沒有找到任何不同的字符返回1 - 即是真的。

因此,如果字符串相同或一個字符串以另一個字符串開頭,則函數返回true,並且false是字符串具有和不同的字符。

+0

爲什麼「它值得解釋?」? – Chris 2010-10-29 18:02:42

+0

最後一行不一定是真的。雖然「Foo」是「BarFooBar」的子字符串,但它仍然會返回false。 – 2010-10-29 18:06:26

+0

@sharth - 謝謝,應該說初始子串。試圖把它放在技術性較差的術語 – 2010-10-29 18:13:55

1

該代碼將看起來像這樣在Java中

 
    int specificComparison(String s1, String s2){ 
     int minLength = Math.min(s1.length(), s2.length()); 
     if(s1.substring(0, minLength).equals(s2.substring(0, minLength)){ 
      return 1; 
     }else{ 
      return 0; 
     } 
    } 

+4

或者,也許,返回s1.startsWith(s2)|| s2.startsWith(S1); – 2010-10-29 18:09:27