我有两个这样的数组: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;
}