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 求大神指教哪里有问题 展开
然后我的代码如下:#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 求大神指教哪里有问题 展开
2个回答
展开全部
① 下面这个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
展开全部
#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
追问
?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询