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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
设计函数char *insert(s1,s2,n),用指针实现在字符串s1中的指定位置n处插入字符串s2
#include <stdio.h>char* insert(char* s1,char* s2,int n) { int j=0; char* ss=new char[100]; char* tsptr=ss; //指向头指针for(int i=0;i<n;i++) *ss++=*s1++; while(*s2!='\0') *ss++=*s2++; while(*s1!='\0')*ss++=*
练习2-5 编写函数any(s1,s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2的字符,则返回-1。
练习2-5 编写函数any(s1,s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2的字符,则返回-1。 #include int any(char s1[], char s2[]) { int i, j; for(i = 0; s1[i] != '\0'; i++) { for(j = 0; s2[
编写一个字符串复制函数mystrcopy(char*s1,char*s2,int m),将字符串s2中从第m个开始全部字符都复制到s1中
请输入10个字符 daoinj73mt oinj73mtPress any key to continue
试编写一个函数,实现在顺序存储方式下字符串的strcompare(S1,S2)运算
先介绍一下字符串的顺序存储字符串其实就是一种特殊的线性表,学过线性表后我们知道,线性表有顺序存储和链式存储两种存储结构,那么很容易想到字符串也有两种基本的存储结构:顺序串和链式串。其实也没什么好说的字符串都知道,不就是0个或多个字符构成的有限序列嘛比如  T= “ABCD”顺序表也刚刚学过,我前面的文章貌似有,连在一起不就是顺序串嘛//手动滑稽QZQ步入正题上代码#include &amp;lt;stdi...
C语言程序设计——在字符串S1查找字符串S2出现次数的函数
C语言程序设计——在字符串S1查找字符串S2出现次数的函数 20 [ 标签:c语言, 程序设计, 字符串函数 ] 浪仙 2009-04-30 10:22 在字符串S1查找字符串S2出现次数的函数。 功能需求 1) 输入的两个字符串S1和S2。 2)查找S2在字符串S1中出现的次数和位置。 3) 输入字符串S3,将在S1中的出现的字符串S2都替换成S3。 4) 如果S1中不含有S2,则找出在S2
函数:字符串s1中删除串s2里包含的所有字符(c语言)
函数:字符串s1中删除串s2里包含的所有字符(c语言)
将字符串s1中任何与字符串s2匹配的字符都删去,存放于一个新的字符串s3中
//编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2匹配的字符都删去 #include #include char *squeeze(char*s1,char*s2); char s1[]; char s2[]; char *s3; int
给定两个字符串s1,s2,请编写代码检查s2是否为s1旋转而成
1.8:假定有一个方法isSubstring,可检查一个单词是否为其他字符串的子串。给定两个字符串s1,s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring 比如waterbottle是erbottlewat旋转后的字符串 解法: 假定s2由s1旋转而成,那么,我们就可以找出旋转点在哪,例如,若以wat对waterbottle旋转,就会得到erbot
写一函数将字符数组s1中的全部字符复制到字符数组s2中,不用strcpy函数
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include int mystrcpy(char *p,char *p1) { while (*p1 != '\0') { *(p++) = *(p1++); } *p = '\0'; } void main() { char a1[100]
算法训练 比较字符串
编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的ASCII码的差值:如果s1>s2,则差值为正;如果s1 样例输入 java basic 样例输出 8  #include #include int main(){ char s1[100],s2