求助ACM新手问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 04:50:55
Input

输入首先给出一个数字N,表示有N组数据. 每组数据有3行. 第1行是原来的文档内容. 第2行是一个数字P, 表示ziliang想在内容的第P个位置插入新内容. 第3行是待插入的新内容. 所有文档内容只含有字母,数字,及下划线.
0 < P < 原文长度

Output

对于每组数据,输出插入后的整行内容.

Sample Input

2
I_hate_ziliang
2
don’t_
I_want_to_die
1
verson

Sample Output

I_don’t_hate_ziliang
Iverson_want_to_die

==============================

我的程序那里不对了(能运行,没结果),指导下,谢谢!:

#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;++i)
{
int count,j=0,k=0,x=0,y=0;
char a[500],b[500],c[500],d[500];
scanf("%s\n%d\n%s\n",a,&count,d);
while(j!=count)
{b[k++]=a[j++];}
x=count;
while(x!='\0')
{c[y++]=a[x++];}
printf("%s",strcat(strcat(b,d),c));
}

return

你的错误太多了·····
第一,acm中决不能cin和scanf混用,俩个的输入输出机制不同,会导致输出顺序的混乱
第二,while(x!='\0')我猜你想写的是while(a[x]!='0');
第三,strcat的处理机制是依赖于你字符串结尾的/0的,而你在手动拷贝的时候没注意对结尾/0的处理。
第四,每组数据输出结尾要有换行
第五,在读入%s之前要把之前的/n读掉,但 %d之前的不用
我改成这样基本对了吧
#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d\n",&n);
for(int i=0;i<n;++i)
{
int count,j=0,k=0,x=0,y=0;
char a[500]={0},b[500]={0},c[500]={0},d[500]={0};
scanf("%s%d\n%s",a,&count,d);
while(j!=count)b[k++]=a[j++];
x=count;
while(a[x]!='\0')c[y++]=a[x++];
printf("%s\n",strcat(strcat(b,d),c));
}

return 0;
}

贴原题啊 你说的不清楚啊