fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int getLength(char* str)
  5. {
  6. int i=0;
  7. while(str[i++]!='\0');
  8. return --i;
  9. }
  10.  
  11. char* concat(char* a, char*b, int n1, int n2, int pos)
  12. {
  13. int n3=n1+n2, i=0, j=0, k=0;
  14. char* c = (char*)malloc((n3+1)*sizeof(char));
  15. while (i<pos) {
  16. c[j++] = a[i++];
  17. }
  18. while (b[k] != '\0') {
  19. c[j++] = b[k++];
  20. }
  21. while (a[i] != '\0') {
  22. c[j++] = a[i++];
  23. }
  24. c[j] = '\0';
  25. return c;
  26. }
  27.  
  28. void substring(char* str, int pos, int len)
  29. {
  30. pos--;
  31. int i;
  32. for(i=0; i<len; i++)
  33. printf("%c", str[i]);
  34. printf("\n");
  35. return;
  36. }
  37.  
  38. int main(void) {
  39. int t;
  40. char ch; int pos; char newstr[3*100000 +1];
  41. char* str = (char*)malloc(sizeof(char));
  42. int n1=0, n2, len;
  43. str[0]='\0';
  44. scanf("%d ", &t);
  45. while(t--)
  46. {
  47. scanf("%c ", &ch);
  48. if(ch=='?')
  49. {
  50. scanf("%d %d ", &pos, &len);
  51. substring(str, pos, len);
  52. }
  53. else
  54. {
  55. scanf("%d %s ",&pos, newstr);
  56. n2 = getLength(newstr);
  57. char* str_latest = concat(str, newstr, n1, n1, pos);
  58. free(str);
  59. str=str_latest;
  60. }
  61. }
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0s 4316KB
stdin
5
+ 0 ab
+ 1 c
? 1 3
+ 2 dd
? 1 5
stdout
acb
acddb