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

如何将两个字符串数组中的元素相互比较,并只打印不匹配的元素?C(不是C+;+;),c,compare,C,Compare,我有两个这样的数组:char*list\u的名称[大小]和char*list\u的名称\u 2[大小] 但这两个数组可能包含不同数量的名称。例如:列表1:“aa”,“bbb”,“ccc”,“ddd”,“QQQ”和列表2:“aa”,“ccc”,“ddd”…我需要打印这样的内容:“bbb”和“QQQ”不匹配” 我可以打印匹配的元素,但不能打印不匹配的元素 到目前为止,我已经做到了: for(i=0;i<size_of_1st_list;i++) { for(l=0;l<size_

我有两个这样的数组:
char*list\u的名称[大小]
char*list\u的名称\u 2[大小]
但这两个数组可能包含不同数量的名称。例如:列表1:“aa”,“bbb”,“ccc”,“ddd”,“QQQ”和列表2:“aa”,“ccc”,“ddd”…我需要打印这样的内容:“bbb”和“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 - %s\n", list_of_names[i]); //prints matches.. and I need print elements which the 2nd array doesn't contain....
           }
    }
}

for(i=0;i乍一看,我认为您的“strcmp”行不会正确响应,因为如果字符串匹配,strcmp将返回0,if()语句中的代码将不会执行。因此,我建议通过添加“!”运算符(逻辑求反)来纠正这一点,因此如果strcmp将返回0(字符串匹配)!(strcmp(…)将返回1,if语句将打印匹配项。关于不匹配的元素,您可以向语句中添加一个'else'子句,因此if!(strcmp(…)如果不是0,则表示字符串不匹配,您可以将其与首选消息一起打印。

@James C关于strcmp
问题的看法是正确的。您可以在开头添加
运算符,或者检查它是否等于0。关于不匹配的元素,您可以添加标志来控制如果没有匹配项。因为这种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 - %s\n", list_of_names[i], list_of_name_2[l]);
            }
        }
    if(flag == 0)
        printf("No match for %s\n", list_of_names[i]);
    }
int标志;
对于(i=0;i使用“中断”

#包括“stdio.h”
#包括“stdlib.h”
int main(){
字符列表(名称【】[16]={“aa”、“bbb”、“ccc”、“ddd”、“QQQ”};
字符列表_的名称_2[][16]={“aa”、“ccc”、“ddd”};
int size_of_first_list=sizeof(名称列表)/sizeof(名称列表[0]);
int size_of_2nd_list=sizeof(list_of_names_2)/sizeof(list_of_names_2[0]);
int i,l;

对于(i=0;iSorry,我忘了在if()中写“==0”好的,我理解。我仍然相信你可以通过我的其余答案和一些修改来找到解决方案。我不确定我是否理解你..你的意思是这样的吗?或者{if(strcmp(…)!=0}不完全是这样,而是类似于:if!(strcmp(…){dothis}//如果上面的语句为true(新行)else{do that}//在任何其他情况下,基本的if else语句实际上是:是否要打印列表1中没有出现在列表2中的数据?谢谢它工作了…我是白痴…我试过了,但是我没有给()第二个if后面的第二个if:D…非常感谢。@user3036674如果此解决方案解决了您的问题,您应该查看此页面。:)
#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 %s\n", list_of_names[i]);
        }
    }


    return 0;
}