UVA10361 Automatic Poetry

没想到这样一个水题也把我憋了这么久,唉,方法很简单把因‘<’'>'号分开的几部分字符串分别放在不同的数组里,输出时,第一行忽略<>号输出,第二行先输出...前面的,后面的变换一下第一行的字符串顺序输出就可以了。

困住我的地方:测试组数的输入问题,评测之后出现runtime error。

while(gets(num) != NULL)
{
sscanf(num,"%d",&n);开始时我定义了char n;用while(gets(&n) != NULL);之后问了斌哥,知道了这样只能读一个字符,也就是测试组数只能是个位数。值得注意:

#include<stdio.h>
#include<string.h>
#define MAXN 100+10
int n;
char s1[MAXN],s2[MAXN],a[MAXN],b[MAXN],a1[MAXN],b1[MAXN];
char num[MAXN];
void solve()
{
int len1 = strlen(s1);
int p = 0, q = 0,g = 0,h = 0, flaut = 0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
for(int i = 0; i < len1; i ++)
{
if(s1[i] == '<')
{ flaut ++;continue;}
if(s1[i] == '>')
{ flaut++;continue;}
if(flaut==1) {a[p++] = s1[i];}
if(flaut==3) b[q++] = s1[i];
if(flaut == 2) a1[g++]=s1[i];
if(flaut == 4) b1[h++]=s1[i];
if(((s1[i]>='a')&&(s1[i]<='z'))||(s1[i]==' '))
printf("%c",s1[i]);
}
printf("\n");
int len2 = strlen(s2);
for(int j = 0; j < len2; j ++)
{
if(s2[j] == '.'){printf("%s%s%s%s\n",b,a1,a,b1);break;}
printf("%c",s2[j]);
}
}
void input()
{
while(gets(num) != NULL)
{
sscanf(num,"%d",&n);
for(int i = 0; i < n; i ++)
{
gets(s1);
gets(s2);
solve();
}
}
}
int main()
{
input();
return 0;
}



原文地址:https://www.cnblogs.com/yuzhaoxin/p/2319229.html