ZJU 1225 Scramble Sort
分析:不是难题,只是折磨人的题,还好要变通变通,运用STL容易解决。
Code
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
deque<string> word;
deque<int> number;
deque<int> offset;
int sum;
void ToLow(const string &s,char c[])
{
int len = s.length();
for(int i=0;i<len;++i)
if(s[i]>='A' && s[i]<='Z')
c[i] = s[i] + 32;
else
c[i] = s[i];
c[len] = '\0';
}
bool lessString(const string &l,const string &r)
{
char l1[100],r1[100];
ToLow(l,l1);
ToLow(r,r1);
return strcmp(l1,r1)<0;
}
bool IsNumber(char str[])
{
int len = strlen(str);
if(str[len-1]>='0' && str[len-1]<='9')
return true;
else
return false;
}
bool Input()
{
char str[100];
int myoffset = 0;
bool exit=false;
word.clear();
number.clear();
offset.clear();
while(!exit)
{
cin>>str;
if(str[0]=='.')
return false;
if(str[strlen(str)-1]=='.')
exit = true;
str[strlen(str)-1] = '\0';
if(IsNumber(str))
{
number.push_back(atoi(str));
offset.push_back(myoffset);
}
else
{
string s = str;
word.push_back(s);
}
++myoffset;
}
sum = myoffset;
return true;
}
void Display()
{
for(int i=0;i<sum;++i)
{
if(!offset.empty() &&offset.front()==i)
{
cout<<number.front();
number.pop_front();
offset.pop_front();
}
else
{
cout<<word.front();
word.pop_front();
}
if(i!=sum-1)
cout<<", ";
else
cout<<"."<<endl;
}
}
int main()
{
while(Input())
{
sort(word.begin(),word.end(),lessString);
sort(number.begin(),number.end());
Display();
}
return 0;
}
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
deque<string> word;
deque<int> number;
deque<int> offset;
int sum;
void ToLow(const string &s,char c[])
{
int len = s.length();
for(int i=0;i<len;++i)
if(s[i]>='A' && s[i]<='Z')
c[i] = s[i] + 32;
else
c[i] = s[i];
c[len] = '\0';
}
bool lessString(const string &l,const string &r)
{
char l1[100],r1[100];
ToLow(l,l1);
ToLow(r,r1);
return strcmp(l1,r1)<0;
}
bool IsNumber(char str[])
{
int len = strlen(str);
if(str[len-1]>='0' && str[len-1]<='9')
return true;
else
return false;
}
bool Input()
{
char str[100];
int myoffset = 0;
bool exit=false;
word.clear();
number.clear();
offset.clear();
while(!exit)
{
cin>>str;
if(str[0]=='.')
return false;
if(str[strlen(str)-1]=='.')
exit = true;
str[strlen(str)-1] = '\0';
if(IsNumber(str))
{
number.push_back(atoi(str));
offset.push_back(myoffset);
}
else
{
string s = str;
word.push_back(s);
}
++myoffset;
}
sum = myoffset;
return true;
}
void Display()
{
for(int i=0;i<sum;++i)
{
if(!offset.empty() &&offset.front()==i)
{
cout<<number.front();
number.pop_front();
offset.pop_front();
}
else
{
cout<<word.front();
word.pop_front();
}
if(i!=sum-1)
cout<<", ";
else
cout<<"."<<endl;
}
}
int main()
{
while(Input())
{
sort(word.begin(),word.end(),lessString);
sort(number.begin(),number.end());
Display();
}
return 0;
}