朋友们,帮我优化一下这几行代码,我已经晕了【VC】

a21999 2010-07-12 07:13:22
今天很郁闷,折腾了一天,也没想出来如何改进,性能还是那么低下。。。

#include "time.h"
#include "iostream"
using namespace std;

int main()
{
string s= "";
for(int i = 0; i < 1000; i ++)
{
s+="00011001110000010";
}
char ch = '1';
clock_t start,finish;
int size = s.size();

start = clock();
for (int i=0;i < size;i++)
{
for (int n = i;(char)s[i] == ch; n++)
if ((char)s[n] != ch)
{
if(n < size)
{
if(n == i+1)
cout<<i+1<<endl;
if(n != i +1)
cout<<i+1<<'-'<<n<<endl;
i=n;
}
}
}

finish = clock();
cout<<"字符串长度: "<<size<<endl;
cout<<"耗时: "<<finish - start<<"毫秒"<<endl;
return 0;

}


现在,处理17000长度的字符串,耗时在2000毫秒左右,如何能提高性能呢?

希望各路高手不吝赐教。。。

不知道为什么,只能悬赏100分,可怜啊。。。


...全文
176 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lx_616_at_yeah_net 2010-07-13
  • 打赏
  • 举报
回复

#include <stdio.h>

#define SIZE 17000
#define N (SIZE-1)

int main(void)
{
register v0 = 16, v1 = 10;

puts("4-5\n8-10\n16");

while( v0 < N )
{
printf("%d-%d\n", (v0 += 5), (v1 += 12));
printf("%d-%d\n", (v0 += 4), (v1 += 5));
printf("%d\n", (v0 += 8));
}

return 0;
}
a21999 2010-07-13
  • 打赏
  • 举报
回复
(←大海無量→神功↑) 做的很好了,谢谢。结贴给分。
昨夜无风 2010-07-12
  • 打赏
  • 举报
回复
耗时不是算法的问题,是你输出占用了时间。你可以把cout去掉看看计算的时间,另外,5楼的用printf代替了cout节约了时间,换成cout也是一样的耗时!!



#include "time.h"
#include "iostream"
using namespace std;

int main()
{
string s= "";
for(int i = 0; i < 1000; i ++)
{
s+="00011001110000010";
}
char ch = '1';
clock_t start,finish;
int size = s.size();

start = clock();
int n = -1;
bool bRecord = false;
for ( i=0;i < size;i++)
{
if((char)s[i] != ch)
{
if(!bRecord)
{
if(i == n+1)
{
cout<<n+1<<endl;
}
else
{
cout<<n+1<<'-'<<i<<endl;
}
bRecord = true;
}
continue;
}
if(bRecord)
{
n = i;
bRecord = false;
} }

finish = clock();
cout<<"字符串长度: "<<size<<endl;
cout<<"耗时: "<<finish - start<<"毫秒"<<endl;
return 0;

}

BlueMap 2010-07-12
  • 打赏
  • 举报
回复
确实没看出来干嘛用。
lx_616_at_yeah_net 2010-07-12
  • 打赏
  • 举报
回复

#include "time.h"
#include "iostream"
using namespace std;

int main()
{
string s= "";
for(int i = 0; i < 1000; i ++)
{
s+="00011001110000010";
}
int n;
int ch = '1';
clock_t start,finish;
int size = s.size();
string buf;
char sTmp[32];

start = clock();
for(i = 0; i < size; ++i)
{
for(n = i; s[i] == ch; ++n)
{
if (n < size && s[n] != ch)
{
if(n == ++i)
{
sprintf(sTmp, "%d\n", i);
}
else
{
sprintf(sTmp, "%d-%d\n", i, n);
}
buf += sTmp;
i=n;
}
}
}

finish = clock();

puts(buf.c_str());

cout<<"字符串长度: "<<size<<endl;
cout<<"耗时: "<<finish - start<<"毫秒"<<endl;

return 0;
}
lx_616_at_yeah_net 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chenjianju 的回复:]

你的90%时间基本都花在了屏幕输出上了,console的滚屏幕效率是很低的。
[/Quote]
时间基本都花在了屏幕输出上了
lx_616_at_yeah_net 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangli820 的回复:]

for(n = i; s[i] == ch; ++n)
这段代码好像意义不大吧
[/Quote]

我也不知道这代码是做什么用的,就不乱动它了。
wangli820 2010-07-12
  • 打赏
  • 举报
回复
for(n = i; s[i] == ch; ++n)
这段代码好像意义不大吧
a21999 2010-07-12
  • 打赏
  • 举报
回复
(←大海無量→神功改的不错,已经能提升到420毫秒左右了,还能更快吗?

chenjianju 2010-07-12
  • 打赏
  • 举报
回复
你的90%时间基本都花在了屏幕输出上了,console的滚屏幕效率是很低的。
lx_616_at_yeah_net 2010-07-12
  • 打赏
  • 举报
回复

#include "time.h"
#include "iostream"
using namespace std;

int main()
{
string s= "";
for(int i = 0; i < 1000; i ++)
{
s+="00011001110000010";
}
int n;
int ch = '1';
clock_t start,finish;
int size = s.size();

start = clock();
for(i = 0; i < size; ++i)
{
for(n = i; s[i] == ch; ++n)
{
if (n < size && s[n] != ch)
{
if(n == ++i)
{
printf("%d\n", i);
}
else
{
printf("%d-%d\n", i, n);
}
i=n;
}
}
}

finish = clock();
cout<<"字符串长度: "<<size<<endl;
cout<<"耗时: "<<finish - start<<"毫秒"<<endl;
return 0;
}
雪影 2010-07-12
  • 打赏
  • 举报
回复
你的程序是想做什么?
两个for循环遍历字符串数组目的是啥?
adamwyb 2010-07-12
  • 打赏
  • 举报
回复
最好描述下你程序要达到什么功能
  • 打赏
  • 举报
回复
using namespace System;
using namespace System::Text;

int main()
{
// Create a StringBuilder that expects to hold 50 characters.
// Initialize the StringBuilder with "ABC".
StringBuilder^ sb = gcnew StringBuilder("ABC", 50);


用vc.net的话 不如用stringbuilder优化一下效率
xumaojun 2010-07-12
  • 打赏
  • 举报
回复
分析一下数据特点s中都是重复的“00011001110000010”,所以下面的循环长度可以改为“00011001110000010”,就可以优化了

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧