我要啦免费统计
几百年没有写小程序玩。

//1 2 3 5 6 8 9   ->  1-3,5-6,8,9


  1#include "generator1.h"
  2
  3typedef std::vector<std::wstring> WSTRVECTOR;
  4typedef std::vector<int> INTVECTOR;
  5
  6struct range
  7{
  8    int start;
  9    int end;
 10}
;
 11typedef std::vector<range> RGVECTOR;
 12
 13void CovertToRangeVector( INTVECTOR &nINTVECTOR, RGVECTOR &rgVector ) 
 14{
 15    INTVECTOR::size_type pos = 0;
 16    int nPre = -1;
 17    int nIndex = -1;
 18    while (pos < nINTVECTOR.size())
 19    {
 20        if (0 == pos)
 21        {
 22            nPre = nINTVECTOR[pos];
 23            range rgTemp;
 24            rgTemp.start = rgTemp.end = nPre;
 25            rgVector.push_back(rgTemp);
 26            ++pos;
 27            ++nIndex;
 28            continue;
 29        }

 30
 31        if (1 == nINTVECTOR[pos] - nPre)
 32        {
 33            rgVector[nIndex].end = nINTVECTOR[pos];
 34            nPre = nINTVECTOR[pos];
 35            ++pos;
 36            continue;
 37        }

 38        else
 39        {
 40            range rgTemp;
 41            rgTemp.start = rgTemp.end = nINTVECTOR[pos];
 42            rgVector.push_back(rgTemp);
 43            nPre = nINTVECTOR[pos];
 44            ++pos;
 45            ++nIndex;
 46            continue;
 47        }

 48    }

 49}

 50
 51void ConvertToWstringVector( RGVECTOR &rgVector, WSTRVECTOR &wstrvtUserStringAns ) 
 52{
 53    for (RGVECTOR::size_type pos = 0; pos < rgVector.size(); ++pos)
 54    {
 55        //s - e, s - e, e
 56        std::wstring wstrRange;
 57        std::wstring wstrStart;
 58        std::wstring wstrEnd;
 59
 60        if (rgVector[pos].start != rgVector[pos].end)
 61        {
 62            wstring wstrTemp;
 63            wchar_t Buffer[256= {0};
 64            int nStart = rgVector[pos].start;
 65            _ltow_s(rgVector[pos].start, Buffer, 10);
 66            //swprintf(Buffer, L"%d", L"DSDASDA");
 67            wstrTemp.assign(Buffer);
 68            wstrTemp.append(L"-");
 69            _ltow_s(rgVector[pos].end, Buffer, 10);
 70            //swprintf(Buffer, L"%d", L"DSDASDA");
 71            wstrTemp.append(Buffer);
 72
 73            wstrRange.append(wstrTemp);
 74        }

 75        else
 76        {
 77            WCHAR Buffer[256= {0};
 78            _ltow_s(rgVector[pos].start, Buffer, 10);
 79            /*wsprintf(Buffer, L"%d", rgVector[pos].start);*/
 80            wstring wstrTemp;
 81            wstrTemp.assign(Buffer);
 82
 83            wstrRange.append(wstrTemp);
 84        }

 85
 86        if (pos + 1 < rgVector.size())
 87        {
 88            wstrRange.append(L",");
 89        }

 90        wstrvtUserStringAns.push_back(wstrRange);
 91    }

 92}

 93HRESULT SimpleGeneratorToUserString(INTVECTOR &nINTVECTOR, WSTRVECTOR &wstrvtUserString)
 94{
 95    //1 2 3 5 6 8 9   ->  1-3,5-6,8,9
 96    //ASSERT(!nINTVECTOR.empty());
 97    if (nINTVECTOR.empty())
 98    {
 99        return E_FAIL;
100    }

101    RGVECTOR rgVector;
102    //
103    CovertToRangeVector(nINTVECTOR, rgVector);
104
105    //WSTRVECTOR wstrvtUserStringAns;
106    //to string
107    ConvertToWstringVector(rgVector, wstrvtUserString);
108
109    return S_OK;
110}

111
112//
113//HRESULT SimpleGeneratorToUserString(INTVECTOR &nINTVECTOR, WSTRVECTOR &wstrvtUserString)
114int main()
115{
116    INTVECTOR nINTVECTOR;
117    WSTRVECTOR wstrvtUserString;
118    //int a[10] = {1,2,3,5,8,9,10,100};
119    //int a[10] = {1};
120    int a[2= {1,100};
121    for (int pos = 0; pos < 2++pos)
122    {
123        nINTVECTOR.push_back(a[pos]);
124    }

125    SimpleGeneratorToUserString(nINTVECTOR, wstrvtUserString);
126    for (WSTRVECTOR::size_type pos = 0; pos < wstrvtUserString.size(); ++pos)
127    {
128        wstring wstrtemp = wstrvtUserString[pos];
129        wcout<<wstrtemp;
130        //printf("%s",wstrvtUserString[pos]);
131    }

132    system("pause");
133    return 0;
134}
posted on 2011-02-17 14:42 阅读(2010) 评论(0)  编辑 收藏 引用 所属分类: 测试训练

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理