网易: 两种排序方法

题目链接:两种排序方法

假设这是已经排好的字符串,然后用两种排序规则依此去检验,不符合哪种规则,就标记出来。
有个地方错了,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;
} 

猜你喜欢

转载自blog.csdn.net/q1122333/article/details/82961208