簡體   English   中英

如何檢查單詞b(C lang)中單詞a的所有字符?

[英]How to check all characters in word a in word b (C lang)?

我想檢查單詞A中的每個字符是否也都在單詞B中。此功能尚不可用,但是我希望您仍然可以對我有所幫助。 我創建了一個檢查變量,僅當單詞A中位置i的字符等於單詞B中的字符i時,該變量才會增加。

int is_equal(char *a, char *b)
{
    int i = 0, j;
    int check = 0;
    while (a[i] != '\0')
    {
        for (j = 0; b[j] != '\0'; j++)
        {
            if (a[i] == b[j]) //Here
            {
                i = i + 1;
                j = 0;
                check = check + 1; //Increase
            }
            else
            {
                i = i + 1;      
                j = 0;
            }
        }
    }

    if (check % strlen(a) == 0)
    {
        return 1;
    }
    return 0;
}

在此函數的結尾,我將檢查字符串a的%長度是否為0。如果是這種情況,則A中的每個字符也都位於B中。但是,如果a [i]和b是無效的[j]不相等,j將重置為0並崩潰。 那么,我該如何解決呢? 如何重置循環以從頭開始檢查?

代碼的問題是,您要決定a[]中的字符是否與嵌套循環中的b[]形式的任何內容匹配。 該決定還為時過早,因為您的代碼沒有機會檢查b[]其他字符。

您可以修改代碼以引入found標志,在進入嵌套循環之前將其設置為零,如果找到匹配項,則將其設置為1:

int found = 0;
for (j = 0 ; !found && b[j] != '\0' ; j++) {
    found = a[i] == b[j];
}

循環后的found值指示b[]a[i]任何字符是否與a[i]匹配。

注意:這對於短a[] s和b[] s很好,但是對於很長的字符串,它可能太慢。 更好的方法是遍歷b[]一次,標記其中的所有字符,然后遍歷a[]以檢查是否缺少任何字符:

int seen[256] = {0};
for (int i = 0 ; b[i] ; i++) {
    // Mark characters from b[]
    seen[(unsigned char)b[i]] = 1;
}
for (int i = 0 ; a[i] ; i++) {
    // Found a char in a[] that's not in b[]
    if (!seen[(unsigned char)a[i]]) {
        return 0;
    }
}
return 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM