九度oj-1099

题目描述:

对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n

然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain

输入:

每个案例为一行字符串。

输出:

将子串排序输出

样例输入:

grain

样例输出:

ain
grain
in
n
rain

代码:

#include "string"  
#include <iostream>  

using namespace std;  

int main()   
{  
    string str;  
    while (cin>>str)  
    {  
        int len = str.size();  
        int pos = 0;  
        int *visited=new int[len];  

        int i = 0;  
        while (i<len)//共寻找len次最小子串  
        {  
            string minsub(1000,'z');//设定近似最大子串(至少你的测试串均小于次字符串)  
            pos = i;  
            //寻找最小子串  
            for (size_t j = 0; j < len; j++)  
            {  
                string stepsub(str, j, len - j);  
                if ( visited[j] != 1 && minsub > stepsub)  
                {  
                    minsub = stepsub;  
                    pos = j;  
                }  
            }  
            visited[pos] = 1;  
            cout << minsub << endl;  
            i++;  
        }     
    }  
    return 0;  
}