关于#c++#的问题:字符串求和

题目描述
给定两个由小写字母构成的字符串 s1,s2。

现在,请你生成一个新字符串 s3,要求 s3=s′1+s′2 且 s3 的字典序尽可能小。

s′1 是指 s1 的非空前缀,s′2 是指 s2 的非空前缀。

一个字符串的最长前缀即是它本身。

输入格式
一行,两个单个空格隔开的由小写字母构成的字符串 s1,s2。

输出格式
一行,一个字符串 s3。

输入输出样例
输入 #1复制
happy birthday
输出 #1复制
hab
说明/提示
所有测试点满足 1≤|s1|,|s2|≤10。

给代码或思路都行

供参考

#include <iostream>
using namespace std;

const int N = 10;

int main()
{
    char s1[N] = "happy", s2[N] = "birthday", s3[N];
    //char s1[N],s2[N],s3[N];
    //cin >> s1 >> s2;

    char *p1 = s1, *p2 = s2, *p3 = s3;

    *p3++ = *p1++;

    while(*p1 && *p2)
    {       
        if(*p1 < *p2)
        {
            *p3++ = *p1++;
            if(*p1 == '\0')
            {
                *p3++ = *p2;
                break;
            }
        }
        else if(*p1 == *p2)
        {
            *p3++ = *p1++;
            p2++;
        }
        else
        {
            *p3++ = *p2++;
            break;;
        }
    }
    *p3 = '\0';
    cout << s3;

    return 0;
}