您的位置:首页 > 其它

Alignment of Code(hdu)

2016-05-14 17:44 267 查看
对字符串进行处理,有坑点如下:

1:@'\0' 这样才是结束,而不是只判断@

2:最后一个样例不会给@,要特判

3:输出的字符串前后都不能有空格,会判错

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[1010][200];	//字符串
int l[1010];	//保存字符串长度
int str[1010];	//保存每一个单词的最长的长度
int main(){
int T;
scanf("%d",&T);
getchar();
while(T--){
memset(str,0,sizeof(str));
int n = 0;
for(;;n++){
if(gets(a
)==NULL)	break;	//特判最后一个样例
if(a
[0]=='@'&&a
[1]==0)	break;
l
= strlen(a
);
}//将每个单词的长度计算出来
for(int i=0;i<n;i++){
int s = 0;
for(int j=0;j<l[i];j++){
int count = 0;
while(j<l[i]&&a[i][j]==' ') j++;
while(j<l[i]&&a[i][j]!=' '){
j++;
count++;
}
if(count>str[s])	str[s] = count;
s++;
}
}//输出
for(int i=0;i<n;i++){
int j=0;
int s = 0;
while(a[i][j]&&j<l[i]){
if(a[i][j]!=' '&&j<l[i]){
if(s!=0)	printf(" ");	//若不是第一个单词,则需要输出一个空格
int count = 0;	//记录当前单词长度
while(a[i][j]!=' '&&j<l[i]){
printf("%c",a[i][j++]);
count++;
}
while(a[i][j]==' '&&j<l[i])	j++;	//这里特判字符串最后的空格
if(j==l[i])	break;	//没有字符,直接结束这个字符串
while(count<str[s]){	//否则输出空格补充长度
printf(" ");
count++;
}
s++;	//进入下一个单词
}
else{
j++;
}
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: