基于visual Studio2013解决面试题之1102合并字符串




题目



解决代码及点评

 
 
 
 
/*
    给出一个函数来合并两个字符串 A 和 B 。字符串 A 的后几个字节和字符串 B 的前几个字节重叠
	重叠部分只要一份
*/

#include <iostream>
using namespace std;

void CopyStr(char *pszBuf1, char *pszBuf2, char *pszBuf3)
{
    int nLen1 =strlen(pszBuf1);
    int nLen2 =strlen(pszBuf2);
    int nLen3 =nLen1 + nLen2 + 1;
    int nPos1 = 0;
    int nPos2 = 0;
    int nPos3 = 0;

    while (nPos1 < nLen1 - 1 && nPos2 < nLen2 - 1 && nPos3 < nLen3 - 1)
    {
        while (pszBuf1[nPos1] != pszBuf2[0] && nPos1 < nLen1 - 1)
        {
            pszBuf3[nPos3++] = pszBuf1[nPos1++];
        }

        if (nPos1 == nLen1 - 1)
        {//pszBuf1完全结束,不存在重复
            pszBuf3[nPos3++] = pszBuf2[nPos2++];
        }
        else
        {//
            int nTmpPos = nPos1;
            while (pszBuf1[nPos1] == pszBuf2[nPos2] && (nPos1 < nLen1) && (nPos2 < nLen2))
            {
                nPos2++;
                nPos1++;
            }

            if (nPos1 == nLen1)
            {//完全重叠
                nPos2 = 0;
                while (nPos2 < nLen2)
                {
                    pszBuf3[nPos3++] = pszBuf2[nPos2++];
                }
            }
            else
            {//不完全重叠,回复nPos1
                nPos1 = nTmpPos;
                nPos2 = 0;
                pszBuf3[nPos3++] = pszBuf1[nPos1++];
            }
        }
    }
    
    
}
int main()
{
    char szBuf1[] = "aghgh";
    char szBuf2[] = "ghjklqwe";
    int nLen3 = strlen(szBuf1) + strlen(szBuf2) + 1;
    char *pszResult = new char[nLen3];
	int i;
    for (i = 0; i < nLen3; i++)
    {
        pszResult[i] = 0;
    }
    pszResult[i-1] = '\0';
    CopyStr(szBuf1, szBuf2, pszResult);
    cout<<pszResult<<endl;
    system("pause");
    return 0;
}


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









转载于:https://www.cnblogs.com/new0801/p/6177315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值