问题:输入一串单词,用空格分开,按单词在字典中的顺序对所有单词排列,不区分大小写。
样例
输入:ad Ad
输出:ad Ad
代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int compare(string frt, string scd)
{
int len = frt.length() < scd.length() ? frt.length() : scd.length(); // 以最小的那个为准
int i = 0;
int mark = 0xffdf; // 用于大小写转换
for (i = 0; i < len; i++)
{
char f = (frt[i] & mark); // 小写转大写
char s = (scd[i] & mark);
if (f == s)
continue;
if (f < s)
return -1; // 前面的小于后面的
else if (f > s)
return 1; // 前面的大于后面的
}
return frt.length() < scd.length() ? -1 : (frt.length() > scd.length() ? 1 : 0); // 0的话就是相等,或者
}
void sort(vector<string>* in)
{
int sz = in->size();
for (int i = 0; i < sz; i++)
{
for (int j = i+1; j < sz; j++)
{
if (compare((*in)[i], (*in)[j]) > 0)
{
string tmp = (*in)[i];
(*in)[i] = (*in)[j];
(*in)[j] = tmp;
}
}
}
}
int main()
{
while (1)
{
vector<string> in;
vector<string> out;
string tmp;
/* 这个是一行一行的输入
scanf_s("%d",&n);
for (i = 0; i < n; i++)
{
scanf_s("%s",tmp);
in.push_back(tmp);
}
*/
// 下面是输入一整行,用空格来判断单个单词
getline(cin, tmp);
stringstream input(tmp);
string result;
while(input>>result)
{
in.push_back(result);
}
sort(&in);
vector<string>::iterator ite;
ite = in.begin();
for (; ite != in.end(); ite++)
{
cout << (*ite) << ' ';
}
}
return 0;
}