//union
//联合体中的成员变量共用的是同一块内存
//union Unit
//{
// char ch[9];
// short a;
// int amount;
// float price;
// long number;
//};
//
//
struct Goods{
char name[20];
float price;
union Unit
{
int amount;
float number;
}num;
};
//
//int main(int argc, const char * argv[]) {
//
// union Unit unit;
// //unit.price =15.8;
// //unit.amount = 12;
//
// //printf("%d %.2f\n",unit.amount, unit.price);
//
// //printf("%p %p %p\n",&unit.amount, &unit.price,&unit.number);
//
// printf("%ld\n", sizeof(union Unit));
//
// return 0;
//}
//定义联合体,初始化只能初始化第一个成员变量
//typedef union Book{
// float price;
// char name[30];
//}Book;
//
//int main(int argc,const char *argv[])
//{
// Book book={12.56};
//
// printf("name:%s price:%.2f\n", book.name, book.price);
//
// return 0;
//}
//枚举类型(枚举常量)
//enum
//枚举常量中的每个成员都占用4字节空间
//enum bool{
// FALSE,
// TRUE
//};
//
//
//#include <stdbool.h>
//
//int main(int argc,const char *argv[])
//{
//
// printf("%d\n",FALSE);
// printf("%d\n",TRUE);
// printf("%ld\n", sizeof(FALSE));
//
// enum bool a;
// a = FALSE;
//
// return 0;
//}
//枚举类型的变量占用4字节空间
//typedef enum Week{
// MON=1,
// TUE,
// WED,
// THU,
// FRI,
// SAT,
// SUN
//}Week;
//
//int main(int argc,const char *argv[])
//{
// //printf("%d %d\n", MON,SUN);
// enum Week day;
// scanf("%d", &day);
// switch (day) {
// case MON:
// printf("星期一 \n");
// break;
// case TUE:
// printf("星期二 \n");
// break;
// case WED:
// printf("星期三 \n");
// break;
// case THU:
// printf("星期四 \n");
// break;
// case FRI:
// printf("星期五 \n");
// break;
// case SAT:
// printf("星期六 \n");
// break;
// case SUN:
// printf("星期日 \n");
// break;
// default:
// break;
// }
// //printf("%ld\n", sizeof(day));
//
// return 0;
//}
//宏定义
//宏定义只是简单的替换,不做类型检查
//无参数的宏
//定义宏的时候,不要再宏语句后加;
#define PRINT printf("hello world\n");printf("welcome\n")
#define PI 3.14
#define LEN 100
//int main(int argc,const char *argv[])
//{
//
// PRINT;
// printf("%.2f\n", PI);
//
// return 0;
//}
//带参数的宏
//确保宏展开之后对我们的程序没有影响
//#define max(a,b) ((a)>(b)?(a):(b))
//#define max(a,b) a>b?a:b
//#define MUL(a,b) a*b//错误
//#define MUL(a,b) ((a)*(b))
//
//int main(int argc, const char *argv[])
//{
// //printf("max = %d\n", max(5, 3));
// //printf("max = %d\n", ((5)>(3)?(5):(3)));
// //printf("max = %d\n",max(5, 3));
// //printf("max = %d\n", max(3+5, 5-1));
// //printf("max = %d\n", 3+5>5-1?3+5:5-1);
// //int a=10,b=20;
//
// //printf("max = %d\n",max(a*b, a+b));//a*b>a+b?a*b:a+b;
// printf("%d\n", MUL(3+5, 5+6)); //((3+5)*(5+6));
//
//
//
// return 0;
//}
//两行代码连接成一行 用'\'
#define max(a,b,c,max) {\
if(a>b)\
{\
if(a>c)\
{\
max = a;\
}\
else\
{\
max = c;\
}\
}\
else\
{ \
if(b>c)\
{\
max = b;\
}\
else\
{\
max = c;\
}\
}\
}
//int main(int argc,const char *argv[])
//{
// int maxn;
// max(3, 10,\
// 8,maxn);
// printf("%d\n",maxn);
//#undef LEN//提前取消宏定义
// //printf("%d\n", LEN);
//
// return 0;
//}
#define die() while(1);
//返回在两字符串中第一个相同的子串(大于1个字符),并将子串输出
//
//
//比如:
//输入
//adbAFEHHFS
//acwfagAFEf
//输出为
//AFE
//
//输入
//qfdgJKlin
//qdfgJKwfo
//输出为
//gJK
//#include <string.h>
//
//int main(int argc,const char *argv[])
//{
// char str1[100]={};
// char str2[100]={};
// scanf("%s%s",str1,str2);
// char substr[3]={};
// int len2 = (int)strlen(str2);
// char *pstr = NULL;
// char *pstr2 = str2;
// for (int i=0; i<len2-1; i++) {
// strncpy(substr, pstr2, 2);
// pstr = strstr(str1, substr);
// if (pstr) {
// break;
// }
// pstr2++;
// }
//
// if (pstr) {
// int i=2;
// while (*(pstr+i)==*(pstr2+i)) {
// i++;
// }
// *(pstr+i)='\0';
// printf("%s\n",pstr);
// }
//
// return 0;
//}
//输入两个字符串,以第二个字符串整体作为分割条件把第一个字符串进行分割,然后输出分割之后的单词。
//比如:
//输入:
//I:am:Optimus:Prime!
//:
//输出:
//I
//am
//Optimus
//Prime!
//输入:
//Hi#@welcome#@to#@qianfeng#@
//#@
//输出:
//Hi
//welcome
//to
//qianfeng
//#include <string.h>
//
//int main(int argc,const char *argv[])
//{
// char str[100]={};
// char substr[50]={};
//
// scanf("%s%s", str,substr);
//
// char *p,*q;
// p = q = str;
// int len = (int)strlen(substr);
// while ((p = strstr(p,substr))) {
// *p = '\0';
// printf("%s\n",q);
// p+=len;
// q = p;
// }
// if (*q) {
// printf("%s\n",q);
// }
//
// return 0;
//}
//在给定的任意字符串中查找指定的大写字符,将其删掉,然后将删除后的字符串输出
//
//
//输入
//772WdfWFDGWH3r
//D
//输出为
//772WdfWFGWH3r
//#include <string.h>
//
//int main(int argc,const char *argv[])
//{
// char str[100]={};
// char ch;
// scanf("%s %c",str,&ch);
// char *pstr = str;
// while (*pstr) {
// if (*pstr==ch) {
// int len = (int)strlen(pstr+1);
// memmove(pstr, pstr+1,len+1);
// pstr--;//
// }
// pstr++;
// }
// printf("%s\n",str);
//
// return 0;
//}
//字符串逆序
//#include <string.h>
//
//int main(int argc,const char *argv[])
//{
// char str[100]={};
//
// scanf("%s",str);
// int len = (int)strlen(str);
// for (int i=0; i<len/2; i++) {
// char temp = str[i];
// str[i]=str[len-i-1];
// str[len-i-1]=temp;
// }
// printf("%s\n",str);
//
// return 0;
//}
//输入一段字符串(不超过10个单词),没有空格外的标点符号,将每个单词逆序输出
//比如:
//输入 this is a cat
//输出:
//cat a is this
//
//输入 who are you
//输出:
//you are who
//#include <string.h>
//
//int main(int argc,const char *argv[])
//{
// char str[1000]={};
// char *p[10]={NULL};
// scanf("%[^\n]",str);
// //printf("%s\n",str);
// char *pstr = str;
// int cnt=0;
// while ((pstr = strtok(pstr," "))) {
// p[cnt++]=pstr;
// pstr = NULL;
// }
//
memmove(p, &p[1], (cnt-1)*8);
cnt--;
// int i;
// for (i=cnt-1; i>=0; i--) {
// printf("%s\n",p[i]);
// }
//
//
// return 0;
//}
//从键盘输入个数不定的字符串(不超过10个),把这些字符串放入一个数组中,然后输入两个数n和m(n 是数组的下标,m是从下标n开始数m个字符串),删除从下标n开始数m个字符串;后面没有删除的字符串的前移,输出删除后数组中的字符串
//比如:
//输入:
//I am Optimus Prime lucy
//0 2
//输出为
//Optimus
//Prime
//lucy
//输入:
//Hi welcome to qianfeng lilei
//2 3
//输出为
//Hi
//welcome
//输入
//abc def ghi jkl heihei
//0 3
//输出为
//jkl
//heihei
//#include <stdlib.h>
//
//int main(int argc,const char *argv[])
//{
// char *p[10]={NULL};
// int cnt=0;
// for (int i=0; i<10; i++) {
// p[i]=(char *)malloc(100*sizeof(char));
// if (!p[i]) {
// return -1;
// }
// scanf("%s",p[i]);
// cnt++;
// if (getchar()=='\n') {
// break;
// }
// }
// int n,m;
// scanf("%d%d", &n,&m);
// if (n+m>cnt) {
// return -1;
// }
// for (int i=n; i<m+n; i++) {
// free(p[i]);
// p[i]=NULL;
// }
//
// for (int i=0; i<cnt-m; i++) {
// if (!p[i]) {
// for (int j=i; j<cnt; j++) {
// p[j]=p[j+m];
// p[j+m]=NULL;
// }
// break;
// }
// }
//
//
// for (int i=0; i<cnt-m; i++) {
// //if (p[i]) {
// printf("%s\n",p[i]);
// //}
// }
//
// return 0;
//}
//输入两个字符串,然后再输入两个数字n 和 m,将第一个字符串从第n(从0开始数)个字符开始,数m个字符(包含第n个)替换为第二个字符串;(注意不要超过字符串的范围)
//比如:
//输入:
//12345 abcde 123456789 abcde 1 7 (p+n+m) (p+n+len)
//1 2
//输出为1abcde45
//输入:
//12345 abcde
//0
//4
//输出为abcde5
//输入
//Iloveyou hate
//1
//4
//输出为Ihateyou
#include <string.h>
int main(int argc,const char *argv[])
{
char str1[100]={};
char str2[100]={};
int n,m;
scanf("%s%s%d%d",str1,str2,&n,&m);
int len1= (int)strlen(str1);
if (n+m>len1) {
return -1;
}
int len2 = (int)strlen(str2);
memmove(str1+n+len2, str1+n+m, len1-n-m+1);
memcpy(str1+n, str2, len2);
printf("%s\n",str1);
return 0;
}