【问题标题】:How to compare elements to each other of two string arrays and print only elements with no match? C (not C++)如何比较两个字符串数组的元素并仅打印不匹配的元素? C(不是 C++)
【发布时间】:2013-12-02 11:27:27
【问题描述】:

我有两个这样的数组:char * list_of_names[size]char* list_of_names_2[size] 但是这两个数组可能包含不同数量的名称。例如: List1: "aa","bbb","ccc","ddd","QQQ" 和 List2: "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....
           }
    }
}

【问题讨论】:

  • 您要打印 list1 中不存在于 list2 中的数据吗?

标签: c compare


【解决方案1】:

乍一看,我认为您的“strcmp”行不会正确响应,因为如果字符串匹配,strcmp 返回 0,并且 if() 语句中的代码不会执行。因此,我建议通过添加“!”来纠正这个问题。运算符(逻辑否定),因此 if strcmp 将返回 0(字符串匹配)!(strcmp(...)) 将返回 1,并且 if 语句将打印匹配项。关于不匹配的元素,您可以在语句中添加“else”子句,因此如果 !(strcmp(...)) 不是 0,则表示字符串不匹配,您可以使用您喜欢的消息。

【讨论】:

  • 对不起,我忘了在 if() 中写“==0”
  • 好的,我明白了。我仍然相信您可以通过我的其余答案和一些修改找到解决方案。
  • 我不确定如果我理解你的话.. 你的意思是这样的吗?否则{if(strcmp(...)!=0)}
  • 不完全是,而是类似: if !(strcmp(....) {do this} // 如果上面的语句为真(换行) else {do that} // 在任何其他情况
  • 好吧,基本的 if-else 语句实际上是:cyberciti.biz/faq/if-else-statement-in-c-program
【解决方案2】:

@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 - %s\n", list_of_names[i], list_of_name_2[l]);
            }
        }
    if(flag == 0)
        printf("No match for %s\n", list_of_names[i]);
    }

【讨论】:

  • 谢谢它有效...我是白痴...我试过了,但如果在第二个 for(){} 之后我没有给第二个...非常感谢..
  • @user3036674 meta.stackexchange.com/questions/5234/… 如果此解决方案解决了您的问题,您应该查看此页面。 :)
【解决方案3】:

使用“中断”

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多