给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
2011-07-16 22:25
323 查看
给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
http://blog.csdn.net/zshtang/article/details/6611372
分类:c/c++
数据结构+算法 2011-07-16 22:25
2468人阅读 评论(2)收藏
举报
[cpp]
view plaincopyprint?
/*
给出一个函数来合并两个字符串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], 最后一个字符为结束字符‘\0’,因此有效字符索引 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;
}
}
}
}
相关文章推荐
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- C++ - 给出一个函数来连接两个字符串A和B,其中字符串A的后几个字节和字符串B的前几个字节重叠
- 请编写实现malloc()内存分配函数功能一样的代码。给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
- 给出一个函数,来复制两个字符串A,B ,字符串A的后几个字节和字符串B的前几个字节重叠
- 4、给出一个函数复制两个字符串A和B,A的后几个和B的前几个字节重叠
- 给出一个函数来合并两个字符串A和B
- 85 复制两个字符串 A 和 B。字符串A的后几个字节和字符串B的前几个字节重叠
- 合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。
- 剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
- 合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。 如: s1集合{“while”,”for”,”switch”,”if”,”continue”
- 合并两个字符串A、B,A的后几个字节同B的前几个字节
- 合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 * 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我A
- 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
- 读取字符串的长度,一个汉字,为两个字节
- 编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串
- 笔试题-输入一个字符数组将这些字符串按顺序合并输出-指针数组-数组指针-函数指针-指针函数