从一编辑框中输入数据,响应不同的按钮,分别实现希尔排序、快速排序、堆排序,从另一编辑框中输出结果,怎么实现? 我很菜的,请指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 生成一个基于对话框的工程然后添加一个editbox控件 改它的默认ID添加对应你每一个算法的按钮 改默认ID还可以添加一个对应输出结果的editbox控件 改ID然后可以使用classwizard 选定对话框这个类 然后添加它的成员变量 把editbox和CString类型的变量绑定起来最后就是在你的每一个Button的click事件中写处理代码了从控件中取变量值可以用mfc提供的UpdateData(FALSE); 从变量中往控件中写回变量使用UpdateData(TRUE);基本就这样了 如一楼所言,基础性的工作都已经做好了,而且现在已经可以实现从一编辑框中输入数据,单击Button,在另一编辑框中输出数据(未排序的)。quick的算法写了一下,大致如下(没什么错吧?),现在我的问题是不知如何把它嵌入到void CSortDlg::OnButtonAsc1() 中去。再帮忙指教一下,谢谢!//void CSortDlg::OnButtonAsc1() 的已写入的代码void CSortDlg::OnButtonAsc1() { char array[500]; m_Input0_Edit.GetWindowText(array,sizeof(array)); m_Result_Edit=(LPCTSTR)array; UpdateData(FALSE);}//快速排序算法quick(char array[], int llimit, int rlimit) { char temp; int left=llimit; int right=rlimit; int pivot=(left+right)/2; char median=array[pivot]; do { while((array[left]<median) && (lef <rlimit)) { left++; } while ((median<array[right]) && (right>llimit)) { right--; } if (left<=right) { temp=array[left]; array[left]=array[right]; array[right]=temp; left++; right--; } } while (left<=right); if (llimit<right) { quick(array,llimit,right); } if (left<rlimit) { quick(array,left,rlimit); }} 其实这样的程序 如果要求不严格(代码的规范性) 你就把这些算法写成你Dialog类派生类的public成员函数就可以了然后在OnButtonxxx();函数中get到控件的输入值 作为参数传入算法函数中进行完排序后 将得到的结果在控件中输出 你的dialog类都在工程中 一个xxxxDlg.cpp一个xxxxDlg.h(xxxx一般和你的工程名一样).h中的就是CDialog派生类的定义 .cpp中是派生类函数的具体实现你在.h的对话框类中声明你所有的排序函数 然后在.cpp中做实现就可以了在类中添加成员函数应该会吧?... 打开文件xxxxDlg.h (xxxx为工程名) 在cxxxxdlg类的public:段加入你的函数声明 比如void quick(char array[], int llimit, int rlimit);然后在xxxxDlg.cpp中加入函数的实现 比如按照上面声明实现函数应为void CxxxxDlg::quick(char array[], int llmiit,int rlimit) {//具体实现}这样就添加了一个类成员函数 到时候直接在按钮中调用就可以了你的函数还有个问题 数组这样传copy的话被传的对象值是不会被改变的 最好改成传一个 char *我觉得我说得够详细了 你没有用过c++吗? 如果还是不明白得话 去看看c++的基础教程吧 ^^ 好多个hInstance ,到底代表什么意思啊? 关于网络投票的问题 VC做出来的程序怎么保证在没有开发环境的机子上面正常运行啊 关于下载网页代码的一点问题 我用OPENGL画了一个机器人手臂,,出现了问题 为什么有cannot add new member 的错误? windows核心编程上的一个疑问(在线等答疑,谢谢) 编译gnugk ,release 没问题,debug版有问题,高手们进来帮帮忙 没有setTime,定时器却莫名运行了,快被逼疯了。 头疼:关于DOS 提示号下直接编译联结 怎么再视图里把一个小位图显示在另一个大位图上面。 ARP与寻址的问题
然后添加一个editbox控件 改它的默认ID
添加对应你每一个算法的按钮 改默认ID
还可以添加一个对应输出结果的editbox控件 改ID
然后可以使用classwizard 选定对话框这个类 然后添加它的成员变量 把editbox和CString类型的变量绑定起来
最后就是在你的每一个Button的click事件中写处理代码了
从控件中取变量值可以用mfc提供的UpdateData(FALSE); 从变量中往控件中写回变量使用UpdateData(TRUE);
基本就这样了
quick的算法写了一下,大致如下(没什么错吧?),现在我的问题是不知如何把它嵌入到
void CSortDlg::OnButtonAsc1() 中去。再帮忙指教一下,谢谢!//void CSortDlg::OnButtonAsc1() 的已写入的代码void CSortDlg::OnButtonAsc1()
{
char array[500];
m_Input0_Edit.GetWindowText(array,sizeof(array)); m_Result_Edit=(LPCTSTR)array;
UpdateData(FALSE);
}
//快速排序算法
quick(char array[], int llimit, int rlimit)
{ char temp;
int left=llimit;
int right=rlimit;
int pivot=(left+right)/2;
char median=array[pivot];
do {
while((array[left]<median) && (lef <rlimit))
{
left++;
} while ((median<array[right]) && (right>llimit))
{
right--;
} if (left<=right)
{ temp=array[left];
array[left]=array[right];
array[right]=temp;
left++;
right--;
} } while (left<=right);
if (llimit<right)
{
quick(array,llimit,right);
}
if (left<rlimit)
{
quick(array,left,rlimit);
}}
然后在OnButtonxxx();函数中get到控件的输入值 作为参数传入算法函数中
进行完排序后 将得到的结果在控件中输出
.h中的就是CDialog派生类的定义 .cpp中是派生类函数的具体实现
你在.h的对话框类中声明你所有的排序函数 然后在.cpp中做实现就可以了
在类中添加成员函数应该会吧?...
然后在xxxxDlg.cpp中加入函数的实现 比如按照上面声明实现函数应为void CxxxxDlg::quick(char array[], int llmiit,int rlimit) {
//具体实现
}
这样就添加了一个类成员函数 到时候直接在按钮中调用就可以了
你的函数还有个问题 数组这样传copy的话被传的对象值是不会被改变的 最好改成传一个 char *
我觉得我说得够详细了 你没有用过c++吗? 如果还是不明白得话 去看看c++的基础教程吧 ^^