字典顺序排列单词问题

问题:输入一串单词,用空格分开,按单词在字典中的顺序对所有单词排列,不区分大小写。
样例

输入: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;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值