[英]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.