获取行输入,一行一个字符串
2152: A Special Sorting
Status | In/Out | TIME Limit | MEMORY Limit | Submit Times | Solved Users | JUDGE TYPE |
---|---|---|---|---|---|---|
stdin/stdout | 3s | 8192K | 356 | 152 | Standard |
Give you a sequence of words, can you sort them in dictionary order?
eg.
yes accidental baby accept accidentIn dictionary order, those words should be printed as the following
accept accident accidental baby yesBut we will make an interesting rule this time. See your keyboard or the picture below: there are ONLY 26 letters in lower-case we will use, and we assume that the letter above is bigger than the letter below, and the left is bigger than the right. For example, 'q' is bigger than 'a', 'c' is bigger than 'v'. So the example at the beginning whill be...
Input and Output
the input will only contain a sequence of words which is less than 1500. the output should print the sorted words each in a single line.Sample Input
yes accidental baby accept accident
Sample Output
baby accident accidental accept yes
水题啊!
#include<iostream>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
int Map[27];
struct M{
char s[30];
}S[1500];
char table[26]={'q','w','e','r','t','y','u','i','o','p','a','s','d',
'f','g','h','j','k','l','z','x','c','v','b','n','m'};
bool operator<(M a,M b)
{
int i=strlen(a.s);
int j=strlen(b.s);
if(i<j)
j=i;
for(int k=0;k<j;k++)
{
if(Map[(a.s[k])-'a']<Map[(b.s)[k]-'a'])
return false;
if(Map[(a.s[k])-'a']>Map[(b.s)[k]-'a'])
return true;
}
return i==j;//Èç¹ûabcd,abc,abcd<abc
}
void search(char key)
{
int i;
for(i=0;i<26;i++)
{
if(key==table[i])
{
Map[key-'a']=i;
break;
}
}
}
int main()
{
freopen("s.txt","r",stdin);
freopen("key.txt","w",stdout);
int i;
string t;
memset(S,0,sizeof(S));
for(i=0;i<26;i++)
{
search('a'+i);
}
i=0;
while(!cin.eof())
{
cin.getline(S[i++].s,30);//不能用cin>>s;否则runtime error
}
sort(S,S+i-1);
for(int j=0;j<i-1;j++)//必须用i-1,最后还有个空行。
cout<<S[j].s<<endl;
//system("PAUSE");
return 0;
}
奇怪的是在vc上能用
string s ;
while(cin>>s)
{};
在dev c++ 上不行。
后来才发现可以
string s ;
while(cin>>s)
{};
但是不能加 memset(S,0,sizeof(S));