杭电ACM1020,自己编的码运行正确,提交总WRONG ANSWER,没辙了,(c++代码如下)

#include "iostream"

using namespace std;

int main()
{
int N;
char str[10001];
char data;
char temp;
int i = 0,j,k,p,q;
cin >> N;
while(N--)
{
getchar(); //吸收回车符
while (data = getchar())
{
if (data == '\n')
break;
str[i] = data;
i++;
}

    for (p = 0; p < i; p++)                                                             //排序
    {
        for (q = 0; q < i - p - 1; q++)
        {
            if (str[q] > str[q + 1])
            {
                temp = str[q];
                str[q] = str[q + 1];
                str[q + 1] = temp;
            }
        }
    }

    int* count = new int[i];                                                            //定义计数数组与字符串数组对应
    for (int u = 0; u < i; u++)                                                         //把初始值全部设置为0
    {
        count[u] = 0;
    }                                                                                   
    for (j = 0; j <= i; j++)
    {
        for (k = 0; k <= i; k++)
        {
            if (str[j] == str[k])
            {
                count[j] ++;
            }
        }
    }

    for (int g = 0; g < i; g++)                                                         //输出
    {
        if (str[g] != str[g + 1])
        {
            if(count[g] == 1)
            {
                cout << str[g];
            }
            else
            cout << count[g] << str[g];
        }
    }
    i = 0;
    cout << endl;
}
return 0;

}

http://blog.csdn.net/qq_34344061/article/details/53088870

且不吐槽你那宛如写炸了的读入外挂一般的读入吧,你读入完之后的排序,改变了字符串的样子这一步从根本来说就已经是错的了,题目要求的子串
是连续的子串,你没有把每个字母的信息存下来就这样排序,你已经不知道原来的字母间的位置关系了(当然你可以用结构体存,但是这一题不需要
这么麻烦)。接下来两不同样有错误,你把字符串的每一个字母都遍历了一遍,并计数,你这样用嵌套的循环,重复的字符被重复计数,导致你的count数组
数据不是对的。还有输出的函数,也是因为跟处理count计数时候相同的问题,导致你的输出会输出重复的东西。楼主,我很怀疑你的程序连样例都过不了,
而且OJ的话,一般测试样例是不会只有样例的,你通过了样例不代表你就解决了这个问题。