HDU1088 字符串

          前前后后在HD上做了不少有关字符串处理的题目了。1088要算是另一朵奇葩。写写心得,贴下代码。

          首先,要解决的是数据如何输入的问题。测试实例只有一组,很大的一组吆。包括字母,数字,标点符号和空格。其中<br>和<hr>具有特殊意义,并且每行最多输出

    80个字符也是要注意的。那么,用什么方式来输入数据呢?理论上讲,cin,gets(),getline()等都应该是可以的。我就是先用了gets(),测试完全对,结果WA了N遍,无

    奈换成 cin,一遍AC了。其次,处理后的结果怎么存储。我就开了一个大数组,将输入数据的对应结果存储起来。当然,还用used来记录每行已存储的数。将所有的信息

    都存到数组中,最后只要输出数组即可了。再次,可能还要注意的是每个单词必须在同一行输出、每行开头无空格、每行每两个单词间有一个空格。

 

          最开心的是自己在这一题上进一步了解了指针、数组、转义字符。比如,我在char *p=0和char *p=NULL,是一样的,因为C++系统中已定义#define NULL 0。

    还有,char ch[10],赋值ch[5]=0和ch[5]='\0'效果相同。可笑的是,我的程序中出现了p=0,然后p++。导致纠结了半天,还好已经了解了!

 

   AC代码:

#include<iostream>
#include<string>
using namespace std;

int main()
{
	char a[100],b[10000];
	int i=0,used=0;

	while(cin>>a)
	{
		if(strcmp(a,"<br>")==0)
		{
			b[i++]='\n';

			used=0;

			continue;
		}

		if(strcmp(a,"<hr>")==0)
		{
			if(used!=0)
				b[i++]='\n';

			for(int j=0;j<80;j++)
				b[i++]='-';

			b[i++]='\n';

			used=0;

			continue;
		}

		int len=strlen(a);
		if(len+1+used>80)
		{
			b[i++]='\n';

		    for(int j=0;j<len;j++)
				b[i++]=a[j];

			used=len;
		}
		else
		{
			if(used!=0)
			    b[i++]=' '; 

			for(int j=0;j<len;j++)
				b[i++]=a[j];

			used+=len+1;
		}
	}

	b[i]=0;
	cout<<b<<endl;

	return 0;
}


 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值