【问题描述】考拉有几个字符串。考拉最近在学习两种字符串的排序方法。(1)根据字符串的字典序排序:例如”car”<”carriage”<”cats”<”doggies<”koala”。

 **求解两种排序方法问题** 
 
【问题描述】考拉有几个字符串。考拉最近在学习两种字符串的排序方法。

(1)根据字符串的字典序排序:例如”car”<”carriage”<”cats”<”doggies<”koala”。

(2)根据字符串的长度排序(相同长度随意):例如”car”<”cats”<”koala”<”doggies”<”carriage”。

考拉想知道自己的这些字符串的排列顺序是否满足这两种排序方法,但考拉又要忙着吃树叶,所以需要你来帮忙验证。

输入描述:输入的第1行为用例数,接下来是每两行一个例子。每个例子的第一行是字符串的个数N(N≤100),接下来的一行 N个字符串,以空格隔开,字符串长度都小于100,均由大小写字母和可显符号组成。

输出描述:如果这些字符串是根据字典序排列而不是根据长度排列,输出“islexicalorder”;如果是根据长度排列而不是根据字典序排列,输出“lengths”;如果两种方式都符合,输出“both”,否则输出“none”。每个例子占一行,最后一个例子也有回车。

样例输入:

2

3

aaa bb c

4

c aa bbb aaaa

样例输出:

islexicalorder

lengths

代码:

#include<iostream>
#include<string>
#define Max 100
using namespace std;
//判断是否是字典序排序 
int judgeLexicalorder(string s[],int n);
//判断是否是长度排列 
int judgeLengths(string s[],int n);
int main()
{
 	int n,k,g;
 	string s[Max],t[Max];
 	cin>>k;
 	g=k;
	while(k--)
	{
	 	cin>>n;
	 	for(int i=0;i<n;i++)
	 	{	
	 		cin>>s[i];
	 	} 
	 	if(judgeLexicalorder(s,n) && judgeLengths(s,n))
	 	{
			t[k+1]="both";
	 	}else if(judgeLexicalorder(s,n))
	 	{
	 		t[k+1]="islexicalorder";
	 	}else if(judgeLengths(s,n))
	 	{
	 		t[k+1]="lengths";
	 	}else
	 	{
	 		t[k+1]="none";
	 	}
	 }
 	for(int i=g;i>=1;i--)
 	{
 		cout<<t[i]<<endl;
 	}
 	return 0;
} 
int judgeLexicalorder(string s[],int n)
{
	if(n==0)
	{
	 	return 0;
	}
	for(int i=0;i<n-1;i++)
	{
	 	if(s[i]>s[i+1])
	 	{
	 		return 0;
	 	}
	}
	return 1;
}
int judgeLengths(string s[],int n)
{
	if(n==0)
	{
	 	return 0;
	}
	for(int i=0;i<n-1;i++)
	{
	 	if(s[i].length()>s[i+1].length())
	 	{
	 		return 0;
	 	}
	}
	return 1;
}

运行截图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假技术po主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值