我使用Dev-C ++。每次使用我的排序函数时程序都会崩溃。没有一种工作方式:|
#include<iostream>
#include<string.h>
using namespace std;
void bsort(char * items,int length)
{
bool ex = true;
for(int a = 0;a < length;a++)
{
cout<<"Exchange";
if(ex == false) break;
ex = false;
for(int b = 0;b >= (length-1);b++)
{
if(items[b] < items[b+1])
{
ex = true;
items[b] ^= items[b+1];
items[b+1] ^= items[b];
items[b] ^= items[b+1];
}
}
}
cout<<items;
}
void sort(char * items,int count)
{
register int a,b;
register char t;
for(a = 1;a < count;++a)
{
for(b = count-1; b >= a;--b)
{
if(items[b-1] > items[b])
{
cout<<"Exchange";
t = items[b-1];
items[b-1] = items[b];
items[b] = t;
}
}
}
}
void xselect(char * items,int count)
{
char c = items[0];
for(int a = 1;a < count;a++)
{
if(c > items[a])
{
c ^= items[a];
items[a] ^= c;
c ^= items[a];
}
}
cout<<items;
}
int main ()
{
char * p = "I am awesome";
xselect(p,strlen(p));
cout<<p;
return cin.get();
}
出了什么问题?
编辑:算法可能是错误的,但导致程序崩溃的原因是什么?我得到“app.exe已经停止工作......”
答案 0 :(得分:4)
在你的功能中:
char * p = "I am awesome";
其中“我很棒”是一个const char *。在排序过程中,你试图改变它,这是我所知道的未定义的行为。
首先分配一个char *并用所需的字符串填充它。
或者更好,因为你正在使用C ++,尝试使用std :: string来处理大部分字符串处理。
Ps:将来请尝试确定代码的哪个部分相关,并发布该代码段而不是链接。此外,有关何时崩溃(例如行号)的更详细信息可以帮助您自己和其他人找到问题。
答案 1 :(得分:1)
void bsort:你做了什么=&gt; for(int b = 0; b&gt; =(length-1); b ++)
你需要做什么=&gt; for(int b = 0; b&lt; length; b ++)
无效排序:它在我的电脑上工作正常。
void xselect:void xselect(string items,int count){
for(int i=0;i<count-1;i++)
{
char c = items[i];
for(int a = i+1;a < count;a++)
{
if(c > items[a])
{
cout<<c<<items[a]<<endl;
c ^= items[a];
items[a] ^= c;
c ^= items[a];
items[i]=c;
cout<<c<<items[a]<<endl;
}
}
}
cout<<items;
}