2016-04-07 154 views
0

我剛開始學習c中的字符數組。我只是看c programming by kochan中提到的示例10.4字符串比較操作

// Function to determine if two strings are equal 
#include <stdio.h> 
#include <stdbool.h> 
bool equalStrings (const char s1[], const char s2[]) 
{ 
    int i=0; 
    bool areEqual; 
    while (s1[i] == s2 [i] && s1[i] != '\0' && s2[i] != '\0') 
      ++i; 
    if (s1[i] == '\0' && s2[i] == '\0') 
      areEqual = true; 
    else 
     areEqual = false; 

    return areEqual; 
} 
int main (void) { 
    bool equalStrings (const char s1[], const char s2[]); 
    const char stra[] = "string compare test"; 
    const char strb[] = "string"; 
    printf ("%i\n", equalStrings (stra, strb)); 
    printf ("%i\n", equalStrings (stra, stra)); 
    printf ("%i\n", equalStrings (strb, "string")); 
    return 0; 
} 

我對字符串平等本身

  1. 在上述程序中的一些問題,他們剛開始的字符串比較兩個字符。 是不是表示如果兩個字符串相等,它們應該具有相同的長度?。如果是的話,爲什麼他們在比較人物之前沒有先比較長度?

  2. 確實有字符串有其他比較操作嗎?當我谷歌搜索,我有像字符串相似的東西,字符串是否相同。任何關於他們的解釋都會很棒。

+0

我看了那本書,並不推薦作爲學習C的唯一來源。作者根本沒有提及**未定義行爲**的概念,並且使用了一些可疑的概念。 –

+0

你有其他建議嗎? @AnttiHaapala – yash

+0

我有一段時間沒有讀過C書,但自從你提到它的名字後,在書中一窺。 Tome認爲這本書根本沒有提到任何陷阱,而是在描述C. –

回答

2

他們不需要比較長度,因爲這些字符串是空終止的。所以,如果你到達任何一個字符串的末尾,並且你已經到達另一個字符串的末尾,那麼它們必須是相同的長度。

在C的字符串庫中,還有其他比較函數。最常見的是strcmpstrncmp。他們會告訴你,字符串或子字符串是否相等,小於或大於彼此(使用基於每個字符的實際整數值的排序)。

+0

這是真的都有空終止符。但'stra'和'strb'的長度不一樣嗎? – yash

+1

不需要。只要你成功地匹配一個角色,你就會增加'i'。如果你敲了一個終止符,這個字符串被確定爲相等:'if(s1 [i] =='\ 0'&& s2 [i] =='\ 0')'。現在你明白我在回答中說了什麼嗎?我不想第三次解釋自己。我希望我第一次解釋它的方式非常清楚。 – paddy

+0

好吧,這是有道理的。謝謝@paddy。我剛開始學習這些東西,所以我第一次沒有聽到你說的話。我猜stackoverflow不適合新手。 – yash

1

爲了知道你給出的字符串的長度。給出這個,有可能找出它們是不是比首先計算長度的速度更快。

+0

,所以一定是他們選擇不比較長度的原因,因爲它需要相同的時間來比較兩個字符串中的字符? – yash

+0

它可能需要更少的時間。 – Pemdas