获取行输入,一行一个字符串

获取行输入,一行一个字符串
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
accident
In dictionary order, those words should be printed as the following
accept
accident
accidental
baby
yes
But 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));

你可能感兴趣的:(获取行输入,一行一个字符串)