c++的一道题,关于字符串编码的,poj 提示runtime error

题目描述如下所示:然后我的代码如下:#include<iostream>usingnamespacestd;intmain(){intk,i,j,count[10];ch... 题目描述如下所示:

然后我的代码如下:#include <iostream>using namespace std;int main(){int k, i, j, count[10];char b[10][1001];cin >> k;for (i = 0; i < 10; i++)count[i] = 0;for (i = 0; i < k; i++){cin >> b[i];for (j = 0; b[i][j] != '\0'; j++)count[b[i][j] - '0']++;for (j = 0; j < 10; j++)if (count[j] != 0)cout << count[j] << j;cout << '\n'; for (j = 0; j < 10; j++)count[j] = { 0 };}return 0;}

提示runtime error 求大神指教哪里有问题
展开
 我来答
splashchaos
推荐于2016-09-05 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3631万
展开全部

① 下面这个c+0x11的标准,

count[j] = { 0 };

改成:

count[j] = 0;

② 而最大的问题是:你的算法不符合要求,122344111 ===> 1122132431,而你的结果是:41221324。 你这不是p-编码,这是统计字符的出现频率。。。 如果是1000个字符的话,那么p-编码可能最长是2000,而你的count[]才10,题目要求是:若干行,每行最大1000字符,你的char b[10][1001]; 最多才10行,虽然每行可以容纳1000字符,但统计的count最大才10,这个是要溢出的。。。

③ 而且你的输出格式也不对,不是且输入且输出;应该是输入完毕后,再全输出~。

④ 既然说的是c++,那么可以修改代码如下:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{    
    int k;
    string str;
    vector<string> vs;

    cin >> k;    
    for (int i = 0; i < k; ++i) {
        cin >> str;
        char c = '\0';
        size_t cnt = 0;        
        string pstr;
        stringstream ss;
        for (int j = 0; j < str.length(); ++j) {
            if (str[j] == c) cnt++; 
            else {
                if ( cnt ) { ss << cnt; pstr += ss.str(); ss.str(""); pstr += c;}
                c = str[j]; cnt = 1; 
            }    
        }
        ss << cnt; pstr += ss.str(); pstr += c;
        vs.push_back(pstr);
    }
    cout << endl;
    for (vector<string>::const_iterator it = vs.begin(); it != vs.end(); ++it)
        cout << *it << endl;
        
    return 0;
}

运行结果:

3
122344111
1111111111
12345

1122132431
101
1112131415
语多放肆
2015-01-13 · TA获得超过156个赞
知道小有建树答主
回答量:122
采纳率:75%
帮助的人:89.3万
展开全部
#include <iostream>
#include <string>
using namespace std;
void slove(string str)
{
char now = str[0];
int cnt=0;
for (int i = 0; i < str.size(); i++)
{
if(str[i]==now)
cnt++;
else
{
cout<<cnt<<now;
now = str[i];
cnt = 1;
}
}
cout<<cnt<<now<<endl;
}
int main(void)
{
int k;
cin>>k;
while(k--)
{
string str;
cin>>str;
slove(str);
}
return 0;
}

如果超时 就把cout和cin 改为scanf和printf

追问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式