gpt4 book ai didi

c++ - 修改后的冒泡排序程序出错

转载 作者:行者123 更新时间:2023-11-28 07:11:48 24 4
gpt4 key购买 nike

Codeforces 问题 339A- http://codeforces.com/problemset/problem/339/A

我尝试对存储在数组偶数位置(从 0 开始)的值进行排序。运行程序时出现错误或程序返回垃圾值。我的解决方案有什么问题?

我的解决方案:

#include<iostream>
#include<cstring>

using namespace std;

int main()
{
char s[101],temp;
int i,j;

cin>>s;

for(i=0;i<strlen(s);i+=2) //Bubble sorting values at even values of i.'+' is stored at odd values of i.
{
for(j=0;j<(strlen(s)-i-2);j+=2)
{
if(s[j]>s[j+2])
{
temp=s[j];
s[j]=s[j+2];
s[j+2]=temp;
}
}
}

cout<<s;
}

最佳答案

你的编译器应该警告你这个问题(你确实打开了所有警告,是吗?总是这样做!):一旦i==strlen(s)-1j 的循环本质上是无界的,这是因为有符号/无符号值的算术规则的魔力。

for(unsigned j=0; j+2+i < strlen(s); j+=2)

没有这个问题。 (i 也应该是 unsigned。)

或者提前停止 i 的循环。你的代码中的问题仍然存在,但你不会遇到它。但我认为这是更糟糕的选择——修复错误,然后通过观察优化 i 不需要走那么远,因为最后一个字符已经形成一个排序序列。

关于c++ - 修改后的冒泡排序程序出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20859680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com