2 ji1812062521 ji1812062521 于 2016.02.18 21:14 提问

编写程序,输入字符串S1和S2 以及插入位置n,在字符串S1中的指定位置n处插入字符串S2。

编写程序,输入字符串S1和S2 以及插入位置n,在字符串S1中的指定位置n处插入字符串S2。例如,输入“jiangsu”、“123”和位置3,则输出“ji123angsu”。

6个回答

VisualEleven
VisualEleven   Ds   Rxr 2016.02.19 13:48
已采纳
 #include <iostream>
#include <string>
using namespace std;

int main()
{
    string str1;
    string str2;
    int pos;
    do
    {
        if ((cin >> str1 >> str2 >> pos) && (pos >= 1))
        {
            str1.insert(pos - 1, str2);
            cout << str1 << endl;
        }
        else
        {
            cout << "Invalid Input" << endl;
            break;
        }

    } while (false);
    return 0;
}
caozhy
caozhy   Ds   Rxr 2016.02.18 21:28
 #include <stdio.h>
#include <string.h>
int main()
{
    char s1[100];
    char s2[100];
    int n = 0;
    gets(s1);
    gets(s2);
    scanf("%d", &n);
    int i;
    int ls2 = strlen(s2);
    for (i = strlen(s1); i > n; i--)
        s1[i + ls2] = s1[i];
    for (i = 0; i < n; i++)
        s1[n + i] = s2[i];
    printf("%s\n", s1);
    return 0;
}

caozhy
caozhy   Ds   Rxr 2016.02.18 21:31
 #include <stdio.h>
#include <string.h>
int main()
{
    char s1[100];
    char s2[100];
    int n = 0;
    gets(s1);
    gets(s2);
    scanf("%d", &n);
    int i;
    int ls2 = strlen(s2);
    for (i = strlen(s1); i >= n; i--)
        s1[i + ls2] = s1[i];
    for (i = 0; i < ls2; i++)
        s1[n + i] = s2[i];
    printf("%s\n", s1);
    return 0;
}
caozhy
caozhy   Ds   Rxr 2016.02.18 21:32

jiangsu
123
3
jia123ngsu
Press any key to continue

henuyx
henuyx   2016.02.19 10:02

上面的程序没加边界判断,如果s1 和s2的长度相加大于100,会越界。

beichen2015
beichen2015   2016.02.19 10:11

以下为Visual Studio 2012环境编写,仅供楼主参考:

#include "stdafx.h"
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

//函数声明
int StrInsert( char *str, int n, char *str_ins );  
void DestroyStr( char *str, char *str_ins);

//函数实现
int StrInsert( char *str, int n, char *str_ins )  
{  
    int i = 0;
    int j = 0;
    int str_len = 0;
    int str_ins_len = 0;  

    str_len = strlen( str );  
    str_ins_len = strlen( str_ins );  

    //n不能小于1或大于被插入的字符串的长度  
    if ( (n < 1) || (n > str_len) )  
    {  
        return 0;  
    }  
    else  
    {   //重新为str_ins分配内存,将str字符串从n开始的字符串接到它后面  
        str_ins =  (char * ) realloc(str_ins, (str_len - n + 1 + str_ins_len + 1) * sizeof(char));  
        if ( str_ins == NULL )  
        {  
            exit( 0 );  
        }

        for ( i = n - 1, j = 0; *(str + i); i++, j++ )  
        {  
            *(str_ins + str_ins_len + j) = *(str + i);  
        }  

        *(str_ins + str_ins_len + j) = '\0';  

        str = (char * ) realloc(str, (str_len + str_ins_len + 1) * sizeof(char));    
        if( str == NULL )  
        {  
            exit( 0 );  
        }  

        for ( j = 0; *str_ins; j++ )  
        {  
            *(str + n - 1 + j) = *str_ins++;  
        }  
        *(str + n - 1 + j) = '\0';  

        return 1;    
    }  
}  

void DestroyStr( char *str, char *str_ins )  
{  
    free( str );  
    free( str_ins );  
}  




int _tmain(int argc, _TCHAR* argv[])
{
    char *str, *str_ins;  
    int n = 0, i = 0;  

    str = (char * )malloc( 20 * sizeof(char) );  
    gets_s( str, 20 );  

    str_ins = (char * )malloc( 10 * sizeof(char) );  
    gets_s( str_ins, 10 ); 

    scanf_s("%d", &n);  

    i = StrInsert( str, n, str_ins );  

    if ( i == 0 )  
    {  
        printf("wrong\n");  
    }  

    else  
    {  
        printf("%s\n",str);  
    }  

    DestroyStr( str, str_ins );  

    system("pause"); 

    return 0;
}


程序运行结果:
jiangsu
123
3
ji123angsu
请按任意键继续. . .

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!