如何比较两个字符串数组中的元素,并只打印不匹配的元素?C(而不是C++)



我有两个这样的数组:char * list_of_names[size]char* list_of_names_2[size]但这两个数组可能包含不同数量的名称。例如:List1:"aa"、"bbb"、"ccc"、"ddd"、"QQQ"和List2:"aa","ccc。。。我需要打印这样的东西:"没有匹配的"bbb"one_answers"QQQ"我可以打印匹配的元素,但我不能打印与不匹配的元素

到目前为止,我已经知道了:

for(i=0;i<size_of_1st_list;i++)
{
    for(l=0;l<size_of_2nd_list;l++)
    {
           if(strcmp(list_of_names[i],list_of_names_2[l])==0){
               printf("%s - match - %sn", list_of_names[i]); //prints matches.. and I need print elements which the 2nd array doesn't contain....
           }
    }
}

乍一看,我认为您的"strcmp"行不会正确响应,因为如果字符串匹配,strcmp将返回0,并且if()语句中的代码将不会执行。因此,我建议添加一个"!"运算符(逻辑求反),所以如果strcmp将返回0(字符串匹配)!(strcmp(…))将返回1,if语句将打印匹配项。关于不匹配的元素,您可以在语句中添加'else'子句,因此if!(strcmp(…))不是0,这意味着字符串不匹配,您可以将它们与首选消息一起打印。

@James C对strcmp问题的看法是正确的。您既可以在开头添加!运算符,也可以检查它是否等于0。关于不匹配的元素,您可以添加一个标志来控制是否不匹配,而不是使用else语句。因为即使具有不同索引的字符串匹配,这种else语句也会显示不匹配。您需要检查整个数组,以确定是否没有匹配项。

此外,在printf语句中,您需要两个字符串参数,但只传递一个。所以,如果它也是固定的,下面这样的代码应该做你的工作:

int flag;
for(i=0;i<size_of_1st_list;i++)
    {
    flag = 0;
    for(l=0;l<size_of_2nd_list;l++)
        {
        if(strcmp(list_of_names[i],list_of_names_2[l]) == 0)
            {
            flag = 1;
            printf("%s - match - %sn", list_of_names[i], list_of_name_2[l]);
            }
        }
    if(flag == 0)
        printf("No match for %sn", list_of_names[i]);
    }

使用"break"

#include "stdio.h"
#include "stdlib.h"
int main(){
    char list_of_names[][16] = {"aa","bbb","ccc","ddd","QQQ"};
    char list_of_names_2[][16] = {"aa","ccc","ddd"};
    int size_of_1st_list = sizeof(list_of_names)/sizeof(list_of_names[0]);
    int size_of_2nd_list = sizeof(list_of_names_2)/sizeof(list_of_names_2[0]);
    int i, l;
    for(i=0; i<size_of_1st_list; i++)
    {
        int flag = 0;
        for(l=0; l<size_of_2nd_list; l++)
        {
            if(strcmp(list_of_names[i], list_of_names_2[l])==0)
            {
                flag = 1;
                break;
            }
        }
        if(flag==0)
        {
            printf("No match for %sn", list_of_names[i]);
        }
    }

    return 0;
}

相关内容

  • 没有找到相关文章

最新更新