gpt4 book ai didi

c - 更快的子字符串处理 C++

转载 作者:行者123 更新时间:2023-11-30 18:50:34 25 4
gpt4 key购买 nike

我有一个程序,可以对一定长度的所有可能的子字符串进行一些处理。我正在努力使程序尽可能快。我只是想知道可以对以下程序做些什么来使其更快

char str[] = "abcdcddcdcdcdcd....................." // large string
int n = strlen(str), m = 20;
for(int i=0; i<n; i++){
char *substr = (char*) malloc(sizeof(char)*m);
strncpy(substr, str+i, m);
// do some processing
int h = hd(substr, X) // X is another string of same length
free(substr);
}

unsigned int hd(const std::string& s1, const std::string& s2)
{

return std::inner_product(
s1.begin(), s1.end(), s2.begin(),
0, std::plus<unsigned int>(),
std::not2(std::equal_to<std::string::value_type>())
);
}

最佳答案

也许是这样的。它通过传递当前子字符串的指针以及要匹配的字符串的长度来避免多重字符串处理。

#include <stdio.h>
#include <string.h>

int hd(char *str, char *cmp, int len)
// find hamming distance between substring *str and *cmp of length len
{
int ind, hamming = 0;
for(ind=0; ind<len; ind++) {
if(str[ind] != cmp[ind]) {
hamming++;
}
}
return hamming;
}

int main(void)
// find hamming distance
{
char str[] = "abcdcddcdcdcdcd";
char cmp[] = "abc";
int lens = strlen(str);
int lenc = strlen(cmp);
int ind, max;
max = lens - lenc;
// analyse each possible substring
for(ind=0; ind<=max; ind++) {
printf("%d\n", hd(str + ind, cmp, lenc));
}
}

关于c - 更快的子字符串处理 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com