我有两个比较两个字符串的简单代码函数。
策略是将短字符串与长字符串顺序比较。
例如,
string1 = "ABCDABCDEFGAHAD",
string2 = "ABCD"
然后通过滑动string1
来比较string2
和string2
,直到string2
的结束到达string1
结尾< / p>
以下是我使用的功能 第一个是
void compare1(char* src , char* target , int src_size , int target_size , int* score){
int i , j;
for ( i = 0 ; i < src_size - target_size ; i++){
for(j=0; j < target_size ; j++){
if(src[i+j] == target[j]){
score[i]++;
}else{
continue;
}
}
}
}
,第二个是
void compare2(char* src , char* target , int src_size , int target_size , int* score){
int i , j;
char* dest = (char*)malloc(sizeof(char)*(target_size));
for( i = 0 ; i < src_size - target_size ; i++){
strncpy(dest,src,target_size);
for( j = 0 ; j < src_size ; j++){
if(dest[j] == target[j]){
score[i]++;
}else{
continue;
}
}
}
free(dest);
}
这两个给了我不同的时间,这是
8393.00 ms from compare1
4415.00 ms from compare2
是什么让这个时间差异?
两个字符串的长度是1024 * 1024 * 10和128相对于src和目标函数变量。
答案 0 :(得分:3)
你的第二个功能是错误的。它应该从src + i
复制而不是从src
复制。此外,嵌套循环应该针对target_size
的{{1}}元素完成,而不是代码中的dest
元素。这导致:
src_size
备注1:void compare2(char* src , char* target , int src_size , int target_size , int* score){
int i , j;
char* dest = (char*)malloc(sizeof(char)*(target_size));
for( i = 0 ; i < src_size - target_size ; i++){
strncpy(dest,src + i,target_size);
for( j = 0 ; j < target_size ; j++){
if(dest[j] == target[j]){
score[i]++;
}else{
continue;
}
}
}
free(dest);
}
没用!
备注2:您可以使用else continue;
复制字符串(因为您知道长度并且不使用终端字符memcpy
)。