字符串-10361 Automatic Poetry

本文介绍了一种将特定格式的字符串转换为另一种格式的方法,利用C++中的标准库函数进行字符串解析和重组,解决了一道编程题目的挑战。文章分享了解题思路及注意事项,包括如何避免常见的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:

s1<s2>s3<s4>s5

c...

转化为:

s1s2s3s4s5

cs4s3s2s5

解题过程:开始时WA2次,而且没找到原因。。。只能归结于程序写得太繁琐,可能某个地方输出不对了,后来改成平铺直叙的写法,一次AC。

注意:

1、正确代码中使用了fstream库函数

2、在使用cin.getline()时,连续使用cin.getline,转行会统一处理,但是当从cin转到cin.getline()时,需要清除缓冲区里的转行

正确代码:

# include <cstdio>
# include <ctime>
# include <cmath>
# include <iostream>
# include <fstream>
# include <cstring>
#define fin cin
#define fout cout

using namespace std;

//ifstream fin("in.txt");
//ofstream fout("out.txt");

char l1[200],l2[200];
char s1[200],s2[200],s3[200],s4[200],s5[200];
	
int main()
{
	int n;
	fin>>n;
	fin.getline(l1,200);//清除缓冲区中的换行 
	
	while(n){
		n--;
		strcpy(l1,"");
		strcpy(l2,"");
		strcpy(s1,"");
		strcpy(s2,"");
		strcpy(s3,"");
		strcpy(s4,"");
		strcpy(s5,"");
		fin.getline(l1,200); 
		fin.getline(l2,200);
		int times;
		int i,j;
		for(i=0;i<strlen(l1);i++){
			if(l1[i]=='<') break;
			s1[i]=l1[i];
		}
		s1[i++]='\0';
		for(j=0;i<strlen(l1);i++,j++){
			if(l1[i]=='>') break;
			s2[j]=l1[i];
		}
		s2[j]='\0';
		i++;
		for(j=0;i<strlen(l1);i++,j++){
			if(l1[i]=='<') break;
			s3[j]=l1[i];
		}
		s3[j]='\0';
		i++;
		for(j=0;i<strlen(l1);i++,j++){
			if(l1[i]=='>') break;
			s4[j]=l1[i];
		}
		s4[j]='\0';
		i++;
		for(j=0;i<strlen(l1);i++,j++){
			s5[j]=l1[i];
		}
		s5[j]='\0';
	/* 
		fout<<"s1= "<<s1<<endl;
		fout<<"s2= "<<s2<<endl;
		fout<<"s3= "<<s3<<endl;
		fout<<"s4= "<<s4<<endl;
     	        fout<<"s5= "<<s5<<endl;
		fout<<"end ABCD"<<endl<<endl;
//*/
		fout<<s1<<s2<<s3<<s4<<s5<<endl;
		for(int j=0;j<strlen(l2);j++){
			if(l2[j]=='.') break;
			fout<<l2[j];
		}
		fout<<s4<<s3<<s2<<s5<<endl;
	}
	
//	fout<<clock()*1.000/CLOCKS_PER_SEC<<endl;
	return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值