2016-07-13
UVA - 10361 Automatic Poetry
题目大意:给出两个序列,第一个 s1<s2>s3<s4>s5,第二个 S...。输出两个序列,第一个删除括号,即 s1s2s3s4s5,第二个将 s2 与 s4 交换位置后替换...,即 Ss4s3s2s5。
解题思路:读入两个序列,以括号为分界分别赋值给 5 个字符串,按需求输出。
注意:这题若能熟练使用strstr与strncpy便能很快解出。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main () {
int n;
cin >> n;
getchar();
while ( n-- ) {
char str[50][1000] = {'\0'};
char s[50][1000] = {'\0'};
gets(str[0]);
gets(str[2]);
strncpy( s[0] , str[0] , strstr(str[0] , "<")-str[0] );//取得第一个<前的字符串
strncpy( s[1] , strstr(str[0] , "<")+1 , strstr(str[0] , ">")-strstr(str[0] , "<")-1 );//取得第一个<>中的字符串
char temp[1000];
strncpy( temp , strstr(str[0] , ">")+1 , strlen(str[0])-(strstr(str[0] , ">")-str[0]) );//取得>后的字符串,以便再次获取字符串
strncpy( s[2] , temp , strstr(temp , "<")-temp );//取得><间的字符串
strncpy( s[3] , strstr(temp , "<")+1 , strstr(temp , ">")-strstr(temp , "<")-1 );//取得第二个<>间的字符串
strncpy( s[4] , strstr(temp , ">")+1 , strlen(temp)-(strstr(temp , ">")-temp) );//取得第二个>后的字符串
strcpy( str[1] , s[0] );
strcat( str[1] , s[1] );
strcat( str[1] , s[2] );
strcat( str[1] , s[3] );
strcat( str[1] , s[4] );
strncpy( str[3] , str[2] , strstr(str[2] , ".")-str[2] );
strcat( str[3] , s[3] );
strcat( str[3] , s[2] );
strcat( str[3] , s[1] );
strcat( str[3] , s[4] );
cout << str[1] << endl << str[3] << endl;
}
return 0;
}