华为补招笔试题20171130

注:实现时无需考虑不合法的情况。

解答过程:感觉没有问题,可后来通过率才37.5%,puzzle。

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>

//转化为大写
string strToUpper(string &str)
{
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] >= 97)
        {
            str[i] -= 32;
        }
    }
    return str;
}


int main()
{
    string strOrder, strNum;
    cin >> strOrder >> strNum;
    int i = 0;
    vector<string> vecstrNum;//用于存放逗号之间的整数字符串
    string strTemNum;

    //把逗号之间的整数字符串选出来,并放到vecstrNum中
    while (i < strNum.size())
    {
        if (strNum[i] != ',')
        {
            strTemNum.push_back(strNum[i]);
        }
        else
        {
            vecstrNum.push_back(strTemNum);
            strTemNum.clear();
        }
        i++;
        if (i == strNum.size())
        {
            vecstrNum.push_back(strTemNum);
        }
    }


    for (int j = 0; j < vecstrNum.size(); j++)
    {
        //对每个整数字符串内部进行升序排序
        sort(vecstrNum[j].begin(), vecstrNum[j].end());

        //把第一位是0的进行处理,和后面首个不为0的数字进行交换
        if (vecstrNum[j][0] == '0')
        {
            for (int i = 1; i < vecstrNum[j].size(); i++)
            {
                if (vecstrNum[j][i] != '0')
                {
                    swap(vecstrNum[j][0], vecstrNum[j][i]);
                    break;
                }
            }
        }
    }

    //需要把整数字符串转化为long类型或者int类型,因为string比较大小和数字类型比较大小不一致.比如33和111,字符串类型认为前者大.
    vector<long> vecIntNum;
    for (int j = 0; j < vecstrNum.size(); j++)
    {
        long num = 0;
        for (int i = 0; i < vecstrNum[j].size(); i++)
        {
            num += pow(10, vecstrNum[j].size() - i - 1)*(vecstrNum[j][i] - '0');//注意减去'0'
        }
        vecIntNum.push_back(num);
    }

    if (strToUpper(strOrder) == "ASCE")
    {
        sort(vecIntNum.begin(), vecIntNum.end());
        for (int j = 0; j < vecstrNum.size() - 1; j++)
        {
            cout << vecIntNum[j] << ',';
        }
        cout << vecIntNum[vecIntNum.size() - 1];
    }
    else//如果是降序就可以倒序输出.
    {
        sort(vecIntNum.begin(), vecIntNum.end());
        for (int j = vecIntNum.size() - 1; j > 0; j--)
        {
            cout << vecIntNum[j] << ',';
        }
        cout << vecIntNum[0];
    }

    return 0;
}

 

posted @ 2017-11-30 21:51  心媛意码  阅读(282)  评论(0编辑  收藏  举报