10361 - Automatic Poetry

题目: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;
}

你可能感兴趣的:(10361 - Automatic Poetry)