Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试相同单词的2个尖刺(C)_C_Arrays_Char - Fatal编程技术网

测试相同单词的2个尖刺(C)

测试相同单词的2个尖刺(C),c,arrays,char,C,Arrays,Char,我正在研究一种算法,可以比较两个句子,找出它们是否由相同的单词组成 基本上,这个函数的输入是2个字符串,我用“”将它们切掉,然后将每个单词放入数组中。所以我有这样的想法: sent1[0]="one" sent1[1]="two" sent1[2]="three" sent1[3]="four" sent2[0]="four" sent2[1]="two" sent2[2]="one" sent2[3]="three" 我的算法是,对来自sent1的每个单词比较sent2中的每个单词。如果句

我正在研究一种算法,可以比较两个句子,找出它们是否由相同的单词组成

基本上,这个函数的输入是2个字符串,我用“”将它们切掉,然后将每个单词放入数组中。所以我有这样的想法:

sent1[0]="one"
sent1[1]="two"
sent1[2]="three"
sent1[3]="four"

sent2[0]="four"
sent2[1]="two"
sent2[2]="one"
sent2[3]="three"
我的算法是,对来自sent1的每个单词比较sent2中的每个单词。如果句子相等,则返回1,否则返回0

//n = max index of sent1 and m is max index of sent2


int equal =0;
for (i = 0; i < (n); i++){
     for (x = 0; x < (m); x++){
            if(strcmp(sent1[i],sent2[x])==0){
                equal =1;
            } 
     }
     if(equal==0){
         return 0;
     }
     equal=0;
}

return 1;
//n=sent1的最大索引,m是sent2的最大索引
int等于0;
对于(i=0;i<(n);i++){
对于(x=0;x<(m);x++){
if(strcmp(sent1[i],sent2[x])==0){
相等=1;
} 
}
如果(等于=0){
返回0;
}
相等=0;
}
返回1;
这个算法的问题是效率很低,速度很慢,为了加快速度,最好是删除数组的索引。我已经找到了相等的单词,所以每次我做新的搜索时,它都会搜索更小的数组。问题是我不知道如何在C中实现,因为我每次尝试都以内存问题结束


感谢您的帮助。

在C语言中,您不能从数组中删除元素,因为C数组是连续的内存块。 但您可以在“删除”项目后向左移动元素

但是,还有一个关于代码的建议: 如果“strcmp”函数成功(发现相等),则无需继续实际循环,可以使用“break”命令终止该循环

int equal =0;
for (i = 0; i < (n); i++){
     for (x = 0; x < (m); x++){
            if(strcmp(sent1[i],sent2[x])==0){
                equal =1;
                break;
            } 
     }
     if(equal==0){
         return 0;
     }
     equal=0;
}

return 1;
int等于0;
对于(i=0;i<(n);i++){
对于(x=0;x<(m);x++){
if(strcmp(sent1[i],sent2[x])==0){
相等=1;
打破
} 
}
如果(等于=0){
返回0;
}
相等=0;
}
返回1;

当您找到匹配项时,您可以使用非常类似于交换和弹出的想法。这将有效地减少搜索数组的大小。不尝试已检查的索引不会给您带来很大的加速。这样,您的算法仍然是
O(n^2)
。试着用蜜蜂编程吗?正如@kajacx所说,排序,然后比较1对1,您的算法将是O(n)加上排序,使用已经生成的算法将非常快。