4、给出一个函数复制两个字符串A和B,A的后几个和B的前几个字节重叠
2012-09-05 10:16
507 查看
//利用该进的KMP算法实现复制A和B,A的后几个和B的前几个字节重叠 //KMP算法 //求next数组 void nextCal(const char* str, int * next) { int length =strlen(str); int j = 0, k = -1; next[0]= k; while(j < length - 1) { if(k == -1 || str[j] == str[k]) { ++k; ++j; next[j] = k; /* //当str[j] == str[k]时,如果用str[k]比较 //还是不等还要继续找next[k], 不如这里直接给了 if(str[j] != str[k]) next[j] = k; else next[j] = next[k]; */ } else k = next[k]; } } //KMP算法 int matchKMP(const char * strD, const char * strP) { int length = strlen(strP); int lengthD = strlen(strD); int * next = new int[length]; nextCal(strP, next); showArr(next, length); int posD = 0; int posP = 0; while(posD < lengthD && posP < length) { if(posP == -1 || strP[posP] == strD[posD]) { posP++; posD++; } else posP = next[posP]; } if(posP >= length) return posD - length; else return -1; } //返回P中和D中重复的字节长度 int matchStr(const char * strD, const char * strP) { int lengthP = strlen(strP); int lengthD = strlen(strD); if(lengthP == 0) return -1; int * next = new int[lengthP]; nextCal(strP, next); int posD = 0; int posP = 0; while(posD < lengthD) { if(posP == -1 || strP[posP] == strD[posD]) { //全部匹配完成,但是posD未到头 if(posP >= lengthP - 1) { posP = next[posP]; continue; } posP++; posD++; } else posP = next[posP]; } return posP; } //复制算法 char * catStrs(char * strA, char * strB, char *result, int size) { int repeatLength = matchStr(strA, strB); int lengthA = strlen(strA); strncpy_s(result, size, strA, lengthA - repeatLength); result[lengthA - repeatLength] = '\0'; strcat_s(result, size, strB); return result; }
相关文章推荐
- 给出一个函数,来复制两个字符串A,B ,字符串A的后几个字节和字符串B的前几个字节重叠
- 请编写实现malloc()内存分配函数功能一样的代码。给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- C++ - 给出一个函数来连接两个字符串A和B,其中字符串A的后几个字节和字符串B的前几个字节重叠
- 85 复制两个字符串 A 和 B。字符串A的后几个字节和字符串B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B
- 截取字符串,汉字占两个字节,字母占一个字节
- 位运算训练01—请编写一个c函数,该函数给出一个字节中被置为1的位的个数
- 翻转子串 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 1.6 给出一张图片,表示为NXN的居然,每个像素点为4字节。写一个函数实现将这张图片旋转90°。
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- .题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数
- 编程:编写一个截取字符串的函数,(网上流传的答案有的是错的)输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
- 10、 java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况