编写程序,输入字符串S1和S2 以及插入位置n,在字符串S1中的指定位置n处插入字符串S2。例如,输入“jiangsu”、“123”和位置3,则输出“ji123angsu”。
#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;
}
jiangsu
123
3
jia123ngsu
Press any key to continue
上面的程序没加边界判断,如果s1 和s2的长度相加大于100,会越界。
以下为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
请按任意键继续. . .
#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;
}