HDU字符串--3783 与字符的简单应用

 

Problem Description
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。
 

 

Input
题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。 1<=length<=100。
 

 

Output
对于每组输入,请输出一行,表示按照要求处理后的字符串。 具体可见样例。
 

 

Sample Input
ZZOOOJJJ ZZZZOOOOOJJJ ZOOOJJ E
 

 

Sample Output
ZOJZOJOJ ZOJZOJZOJZOO ZOJOJO
#include<stdio.h>
#include<string>
int main()
{
	char a[110];
	while(gets(a) &&(a[0]!='E'))
	{
		int x=0,y=0,z=0,len=0;
		len=strlen(a);
		for(int i=0;i<len;i++)
		{
			if(a[i]=='Z') x++;
			else if (a[i]=='O') y++;
			else z++;
		}
		while(x>0||y>0||z>0)
		{
			if(x>0) putchar('Z'); x--;
			if(y>0) putchar('O'); y--;
			if(z>0) putchar('J'); z--;
		}
		printf("\n");
	}
	return 0;
}

 

gets输入字符串时,是以回车结束,可以接收空格。

scanf输入字符串时,不能输入有空格的字符串。

所以此处选择gets来接收字符串;

 

sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸


大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因

如果要获得这个字符串的长度,则一定要使用 strlen


char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //b=20;

具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:


    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void

 

posted @ 2014-11-22 10:12  zhoudan  阅读(345)  评论(0)    收藏  举报