题目:10361 - Automatic Poetry
题目大意:输入的字符串只有小写字母或是空格,将输入的第一字符串s1<s2>s3<s4>s5,去掉<,>原样输出;第二字符串t1...,将,,,用s4s3s2s5代替;
解题思路:将输入的字符以<,>分解成s1,s2,s3,s4,s5;第一个输出字符串顺序:s1s2s3s4s5;第二个:t1s4s3s2s5;
分解方法有多种:
比较麻烦的第一种:现将字符串含<>整串输入,在通过判断>,<分解成5个字符串;注意5个字符串一定要在每次使用时都初始化,否则会有前一次的残留数据;
第二种:运用getline()参数结束位,在输入时就将字符串拆分成5个字符串,再按上面的要求输出就可以了;
第一种:
#include<stdio.h> #include<string.h> #include<string> const int N = 105; char str1[N], str2[N]; char a[N], b[N], c[N], d[N]; bool sign, bo; void judge (int i, char *s, char a, char b) { int j, l; for (j = i+1, l=0; j<strlen(str1); j++, l++) { if(str1[j] != b ) s[l] = str1[j]; else { s[l] = '\0'; if(a=='<') sign = 0; else bo = 0; } } } int main () { int n; char ch; scanf("%d%*c", &n); while (n--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); gets(str1); gets(str2); int i , j ; sign = true; bo = true; for (i = 0; i<strlen(str1); i++) { if (str1[i]=='<' ) { if(sign) { judge(i, a, '<', '>'); i+=strlen(a); continue; } else { judge(i, c, '<', '>'); i+=strlen(c); continue; } } if(str1[i]=='>' ) { if(bo) { judge(i, b, '>', '<'); i+=strlen(b); continue; } else { judge(i, d, '>', '<'); i+=strlen(d); continue; } } } for (i = 0; i<strlen(str2); i++) { if (str2[i]=='.') { str2[i]='\0'; break; } } strcat(str2, c); strcat(str2, b); strcat(str2, a); strcat(str2, d); for (i = 0; i<strlen(str1); i++) { if(str1[i]=='<') { str1[i]='\0';break; } } strcat(str1,a); strcat(str1,b); strcat(str1,c); strcat(str1,d); puts(str1); puts(str2); } return 0; }