达不到效果问题出在哪

img

字符串问题:设计一个通用函数char *insert(char *s1,char *s2,int n)实现在字符串s1中从第m个字符开始插入字符串s2,在主程序中对该函数进行测试。
初始状态:s1: abcdefg
s2 : 1234
输入插入字符串的位置3
目标状态 :s1: ab1234cdefg
s2: 1234


#include <iostream>
#include <string>
using namespace std;
char* insert(char* s1, char* s2, int n)
{
    int p = strlen(s1);//s1字符串的长度
    int q = strlen(s2);//s2字符串长度
    int k = (n - 1) + p ;
    for (int i = n - 1; i < k; i++)//空出n个位置
    {
        s1[i+q] = s1[i];
    }
    for (int i = 0; i < q; i++)
    {
        s1[n - 1 + i] = s2[i];//将s2插入s1
    }
    return s1;
}
int main()
{
    char s1[100] = "abcdefg";
    char s2[100] = "1234";
    cout << "插入前:" << endl;
    cout << s1 << endl;;
    int c;
    cout << "输入要插入的位置:" << endl;
    cin >> c;
    insert(s1, s2, c);
    cout << "插入后:" << endl;
    cout << s1 << endl;

}

你是想索引重0开始吗,既然想遵从索引重零开始,那上面的减1就不要了,这样代码索引就是从零开始了,你加1,就比如,代码默认从零开始,你输入0本来就挺好,你让人家输入1然后再减1,这样达到从0开始的效果,不就不对了嘛,所以索引想要从零开始,就不用管-1了,改好了,望采纳,代码:


#include <iostream>
#include <string>
using namespace std;
char* insert(char* s1, char* s2, int n)
{
    int p = strlen(s1);//s1字符串的长度
    int q = strlen(s2);//s2字符串长度
    int k = n + p;
    for (int i = n; i < k; i++)//空出n个位置
    {
        s1[i + q] = s1[i];
    }
    for (int i = 0; i < q; i++)
    {
        s1[n + i] = s2[i];//将s2插入s1
    }
    return s1;
}
int main()
{
    char s1[100] = "abcdefg";
    char s2[100] = "1234";
    cout << "插入前:" << endl;
    cout << s1 << endl;;
    int c;
    cout << "输入要插入的位置:" << endl;
    cin >> c;
    insert(s1, s2, c);
    cout << "插入后:" << endl;
    cout << s1 << endl;

}

效果:

img