题目链接:两种排序方法
假设这是已经排好的字符串,然后用两种排序规则依此去检验,不符合哪种规则,就标记出来。
有个地方错了,wa了好几次,strcmp,如果字符串1>字符串2,返回的是一个正整数,而不是1。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = 100+5;
struct node{
char s[maxn]; //存单词
int len; //单词的长度
}word[maxn];
int main()
{
int n;
while(cin>>n)
{
for(int i = 0;i < n;i++)
{
scanf("%s",word[i].s); //输入单词
word[i].len = strlen(word[i].s); //单词的长度
}
int flag1 = 1,flag2 = 1; //规则1和规则2,分别是判断是否符合长度的规则和字典序的规则
for(int i = 0;i < n-1;i++)
{
if(flag1 && word[i].len > word[i+1].len )
{
flag1 = 0; //长度的规则不符合
}
if(flag2 && strcmp(word[i].s,word[i+1].s)>0 )
{
flag2 = 0; //字典序的规则不符合
}
}
if(flag1 && flag2) //
{
cout<<"both"<<endl;
}else if(flag1)
{
cout<<"lengths"<<endl;
}else if(flag2)
{
cout<<"lexicographically"<<endl;
}else
{
cout<<"none"<<endl;
}
}
return 0;
}