2017-A

发布时间 2023-03-24 09:19:39作者: ben犇

2017-A

题目描述:

输入一个字符串,要求输出能把所有的小写字符放前面,大写字符放中间,数字放后面,并且中间用空格隔开,如果同种类字符间有不同种类的字符,输出后也要用字符隔开。
例:

输入 12abc3KF12
输出 abc KF 12 3 12
输入 rwr21r3hello666world
输出 rwr r hello world 21 3 666

题解:

#include <iostream>
#include <cstring>

using namespace std;
int main()
{
	string s;
	cin>>s;
	char s1[100];//存放小写字母
	char s2[100];//存放大写字母
	char s3[100];//存放数字
	int n1=0,n2=0,n3=0;
	for(int i=0;i<s.length();i++)
	{
		if(s[i]>='a' && s[i]<='z')//先判断该字符是否属于a~z 
		{//若属于a~z 
			if(i==0)//如果是输入字符串的第一个元素直接存入结果 
			{
				s1[n1++]=s[i];
			}
			else	//如果不是第一个元素,则需要判断前驱元素是否是同一类型的元素 
			{
				if(s[i-1]>='a' && s[i-1]<='z')//若前驱元素是同一类型的元素 
				{
					s1[n1++]=s[i];	// 将当前元素压入结果 
				}
				else	//若前驱元素不是同一类型的元素 ,即同种类字符间由不同种类的字符 
				{
					s1[n1++]=' '; //则输出后也要用字符隔开 
					s1[n1++]=s[i]; //隔开后再将当前元素压入结果,相当于另起一段 
				}
			}
		}
		if(s[i]>='A' && s[i]<='Z')
		{
			if(i==0)
			{
				s2[n2++]=s[i];
			}
			else
			{
				if(s[i-1]>='A' && s[i-1]<='Z')
				{
					s2[n2++]=s[i];
				}
				else
				{
					s2[n2++]=' ';
					s2[n2++]=s[i];
				}
			}
		}
		if(s[i]>='0' && s[i]<='9')
		{
			if(i==0)
			{
				s3[n3++]=s[i];
			}
			else
			{
				if(s[i-1]>='0' && s[i-1]<='9')
				{
					s3[n3++]=s[i];
				}
				else
				{
					s3[n3++]=' ';
					s3[n3++]=s[i];
				}
			}
		}
	 } 
	 for(int i=0;i<n1;i++)	cout<<s1[i];
	 cout<<" ";
	 for(int i=0;i<n2;i++)	cout<<s2[i]; 
	 cout<<" ";
	 for(int i=0;i<n3;i++)	cout<<s3[i];
	 system("pause");
	 return 0;
 }