⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strmaxsumdlg.cpp

📁 这是用VC++编的算法分析中的实现!!有每个源程序
💻 CPP
字号:
// StrMaxSumDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ArithmeticDemo.h"
#include "StrMaxSumDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CStrMaxSumDlg dialog


CStrMaxSumDlg::CStrMaxSumDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CStrMaxSumDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CStrMaxSumDlg)
	m_nInputDataEntries = 0;
	//}}AFX_DATA_INIT

	m_BKBrush.CreateSolidBrush(RGB(171,187,222));

}


void CStrMaxSumDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CStrMaxSumDlg)
	DDX_Text(pDX, IDC_INPUTDATAENTRIES, m_nInputDataEntries);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CStrMaxSumDlg, CDialog)
	//{{AFX_MSG_MAP(CStrMaxSumDlg)
	ON_BN_CLICKED(IDC_ANSWERBTN, OnAnswerbtn)
	ON_BN_CLICKED(IDC_CLEANBTN, OnCleanbtn)
	ON_WM_CTLCOLOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStrMaxSumDlg message handlers

void CStrMaxSumDlg::OnAnswerbtn() 
{
	// TODO: Add your control notification handler code here

	UpdateData(TRUE);

	CString InputDataStr;
	GetDlgItem(IDC_INPUTDATA)->GetWindowText(InputDataStr);
	if(InputDataStr.IsEmpty()||m_nInputDataEntries<=0)
	{
		AfxMessageBox("请输入必要的数据");
		GetDlgItem(IDC_ANSWERBTN)->EnableWindow(TRUE);

		return;
	}

	CStringArray list;
	GetElements(InputDataStr,m_nInputDataEntries,list);

	int nType;
	CString strResult;
	CComboBox* pTypeList=(CComboBox*)GetDlgItem(IDC_TYPE);
	nType=pTypeList->GetCurSel();

	switch(nType)
	{
		case 0:
			{
				int* iList=new int[m_nInputDataEntries];
				if(iList==NULL)
				{
					GetDlgItem(IDC_ANSWERBTN)->EnableWindow(TRUE);
					AfxMessageBox("分配内存失败");

					return;
				}
				
				int MaxSum=0,b=0;
				for(int i=0;i<list.GetSize();i++)
				{
					iList[i]=atoi(list.GetAt(i));
				}

				for(int j=0;j<list.GetSize();j++)
				{
					if(b>0) b+=iList[j];
					else b=iList[j];
					if(b>MaxSum) MaxSum=b;
				}
				
				strResult.Format("%d",MaxSum);
				

			}
			break;
		case 1:
			{
				double* dList=new double[m_nInputDataEntries];
				if(dList==NULL)
				{
					GetDlgItem(IDC_ANSWERBTN)->EnableWindow(TRUE);
					AfxMessageBox("分配内存失败");

					return;
				}
				
				double MaxSum=0,b=0;
				for(int i=0;i<list.GetSize();i++)
				{
					dList[i]=atof(list.GetAt(i));
					if(b>0) b+=dList[i];
					else b=dList[i];
					if(b>MaxSum) MaxSum=b;
				}

				strResult.Format("%f",MaxSum);
			}
			break;
	}

	GetDlgItem(IDC_MAXSUM)->SetWindowText(strResult);
	
}

void CStrMaxSumDlg::OnCleanbtn() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_INPUTDATAENTRIES)->SetWindowText("");
	GetDlgItem(IDC_INPUTDATA)->SetWindowText("");
	GetDlgItem(IDC_MAXSUM)->SetWindowText("");
	GetDlgItem(IDC_TYPE)->SetWindowText("");
	
}

BOOL CStrMaxSumDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	((CComboBox*)GetDlgItem(IDC_TYPE))->AddString("int");
	((CComboBox*)GetDlgItem(IDC_TYPE))->AddString("double");

	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CStrMaxSumDlg::GetElements(CString str, int nSize, CStringArray &list)
{
	str.TrimLeft();
	str.TrimRight();

	list.RemoveAll();
	list.SetSize(nSize);

	for(int i=0;i<nSize;i++)
	{
		list.SetAt(i,'0');
	}
	

	int nIndex;
	int nTotalNum=0;
	CString strTemp;

	while(str.GetLength()>0&&nTotalNum<m_nInputDataEntries)
	{
		nIndex=str.Find(' ');
		if(nIndex!=-1)
		{
			strTemp=str.Left(nIndex);
			list.SetAt(nTotalNum,strTemp);
			int m=str.GetLength();
			int n=strTemp.GetLength();
			str=str.Right(m-n);

			str.TrimLeft();

			nTotalNum++;
		}
		else
		{
			list.SetAt(nTotalNum,str);
			str.Empty();

			nTotalNum++;
		}
	}

}

HBRUSH CStrMaxSumDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if(nCtlColor==CTLCOLOR_DLG)
		return (HBRUSH)m_BKBrush.GetSafeHandle();
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -