首页 > 编程知识 正文

国际海运运输公司

时间:2023-05-03 18:07:21 阅读:272930 作者:1201

/*给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。//*/#include <iostream>#include <iomanip>#include <limits>using namespace std;void copystr(char pachar[], char pbchar[], int sza, int szb, char* &result);int main(){char pachar[] = "asdfvxcbnbvcxzghgh";char pbchar[] = "ghjklqwe";int sza = sizeof(pachar);int szb = sizeof(pbchar);int sz = sza + szb - 1;char* result = new char[sz];copystr(pachar, pbchar, sza, szb, result);cout << result << endl;return 0;}void copystr(char pachar[], char pbchar[], int sza, int szb, char* &result){int posa = 0;int posb = 0;int pos = 0;int sa = 0;int sz = sza + szb - 1;while(pos < sz && posa < sza - 1 && posb < szb - 1){ // 字符串索引为 [0 ~ size -1], 最后一个字符为结束字符‘’,因此有效字符索引 index < size -1 // 如果a串中没找找到与b串中首字符相匹配的,则说明不存在重叠,// 在找到重叠之前,将a串中相应字符拷贝到目标串while((pachar[posa] != pbchar[0]) && (posa < sza - 1)){ result[pos] = pachar[posa];++pos;++posa;}// 拷贝a串停止,两种可能情况分别处理: 一是拷贝到a串末尾,二是遇到与b串首字符相匹配的情况if(posa == sza - 1){ // 拷贝到末尾, 继续拷贝b串直至结束while(posb <= szb - 1){result[pos] = pbchar[posb];++pos;++posb;}break;}else{// 遇到相同字符,分两种情况,一是遇到重叠字串,即a串此处开始的部分与b串的起始部分完全相同,二是偶遇相同字符,不是头尾重叠sa = posa; // 为不是重叠的结果保存备用记录while((pachar[posa] == pbchar[posb]) && (posa < sza - 2) && (posb < szb - 2)){ // 循环判断是否完全重叠++posa;++posb;}if(posa == sza - 2){ // 重叠posb = 0;// 恢复posb初始位置while(posb <= szb - 1){result[pos] = pbchar[posb];++pos;++posb;}break;}else{ // 偶遇相同字符posa = sa; // 恢复 posa 偶遇 b[0] 位置posb = 0;// 恢复posb初始位置result[pos] = pachar[posa];++pos;++posa;}}}}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

  • 相关阅读