編了一個命令列輸入式的矩陣計算器,是一個控制臺程式,老師讓改成可視化視窗式的程式,不太會,怎么在MFC中實作這種命令列輸入和輸出啊,大神們幫幫我吧。代碼貼不下了
[code=c]// test.cpp :
#include "stdafx.h"
#include <iostream>
#include <map>
#include <stdio.h>
#include <opencv2\core\core.hpp>
#include <string.h>
#include <cstringt.h>
#include "Complex.h"
#include <ccomplex>
#include <complex>
using namespace std;
using namespace cv;
struct _Type
{
string Type;
Mat _TypeValue;
};
struct FindIndx
{
vector<int> indx;
};
typedef struct
{
int m, n;
double **a;
void matrix()
{
//double *b=new double[m];
// *a = new double[n];
a = new double*[m];
for (int i = 0;i<m;i++)
{
a[i] = new double[n];
}
};
void destroy()
{
delete a;
};
}matrix;
struct CalculateFind
{
FindIndx indx1;
FindIndx indx2;
FindIndx indx3;
FindIndx indx4;
FindIndx indx5;
FindIndx indx6;
FindIndx indx7;
FindIndx indx8;
FindIndx indx9;
FindIndx indx10;
FindIndx indx11;
FindIndx indx12;
FindIndx indx13;
FindIndx indx14;
FindIndx indx15;
FindIndx indx16;
FindIndx indx17;
};
vector<_Type> A_value;
void SetValue(vector<_Type>* Value, string str, Mat value);
FindIndx Find(string ccstring, int value);
void showMat(vector<_Type> Value, string str);
void showMat(Mat m);
Mat VariAssign(string aa);
int WhatCompution(string aa, vector<_Type>* Value);
FindIndx StrFind(string ccstring, string value);
bool SortBy(int &a, int &b);
Mat GetMat(vector<_Type>* Value, string str);
void exchang_row(double *a, double *b, int n);
void mul_row(double *a, double k, int n);
void add_row(double *a1, double *a2, double k, int n);
int rank_matrix(Mat scr);
// 主函式
int main(int argc, _TCHAR* argv[])
{
int a = 12;
char str[100] = { 0 };
SYSTEMTIME st = { 0 };
GetLocalTime(&st);
// printf("%d",st.wDay);
if (st.wDay>12)
{
// return 0;
}
while (true)
{
Mat value = Mat::zeros(2, 3, CV_32F);
scanf_s("%s", str,100);
//SetValue(&A_value, str, value);
showMat(A_value, str);
WhatCompution(str, &A_value);
}
return 0;
}
Mat VariAssign(string aa)
{
return Mat::ones(1, 1, CV_32F);
}
// 查找操作內容函式
int WhatCompution(string aa, vector<_Type>* Value)
{
CalculateFind calculatefind;
calculatefind.indx1 = Find(aa, '[');
calculatefind.indx2 = Find(aa, ']');
calculatefind.indx3 = Find(aa, ';');
calculatefind.indx4 = Find(aa, '+');
calculatefind.indx5 = Find(aa, '*');
calculatefind.indx6 = Find(aa, '-');
calculatefind.indx7 = Find(aa, '/');
calculatefind.indx8 = Find(aa, ')');
calculatefind.indx9 = Find(aa, '=');
calculatefind.indx10 = StrFind(aa, "det(");
calculatefind.indx11 = StrFind(aa, "rank(");
calculatefind.indx12 = StrFind(aa, "eig(");
calculatefind.indx13 = StrFind(aa, "svd(");
calculatefind.indx14 = Find(aa, ' ');
calculatefind.indx15 = Find(aa, ',');
calculatefind.indx16 = Find(aa, '\'');
calculatefind.indx17 = Find(aa, '-');
if (calculatefind.indx1.indx.size() == 1 && calculatefind.indx2.indx.size() && calculatefind.indx9.indx.size())
{
string a_p = aa.substr(calculatefind.indx1.indx[0], calculatefind.indx2.indx[0] - calculatefind.indx1.indx[0]);
FindIndx a = Find(a_p, 'i');
int size_rows = calculatefind.indx3.indx.size() + 1;
int size_cols = (calculatefind.indx15.indx.size() + (size_rows)) / (size_rows);
if (a.indx.size() >= 1)
{
Mat value = Mat::zeros(size_rows, size_cols, CV_32FC2);
vector<int> temp;
temp = calculatefind.indx1.indx;
temp.insert(temp.end(), calculatefind.indx2.indx.begin(), calculatefind.indx2.indx.end());
temp.insert(temp.end(), calculatefind.indx3.indx.begin(), calculatefind.indx3.indx.end());
temp.insert(temp.end(), calculatefind.indx15.indx.begin(), calculatefind.indx15.indx.end());
std::sort(temp.begin(), temp.end(), SortBy);
int i = 0, j = 0;
unsigned int p = 0;
while (p<(temp.size() - 1))
{
bool flag = 0;
i = p / (size_cols);
j = p % (size_cols);
string ss = aa.substr(temp[p] + 1, temp[p + 1] - temp[p] - 1);
a = Find(ss, '+');
if (a.indx.size() == 0)
{
a = Find(ss, '-');
flag = 1;
}
FindIndx b = Find(ss, 'i');
if (a.indx.size() == 1 && b.indx.size() == 1) //有實部也有虛部
{
string tt = ss.substr(a.indx[0] + 1, ss.length() - a.indx[0] - 1);
if (tt.length() == 1)
{
if (flag == 1)
{
std::complex<float> OO(atof(ss.substr(0, a.indx[0]).c_str()), -1);
value.at<std::complex<float>>(i, j) = OO;
}
else
{
std::complex<float> OO(atof(ss.substr(0, a.indx[0]).c_str()), 1);
value.at<std::complex<float>>(i, j) = OO;
}
}
else
{
if (flag == 1)
{
std::complex<float> OO(atof(ss.substr(0, a.indx[0]).c_str()), 0 - atof(tt.substr(0, tt.length() - 1).c_str()));
value.at<std::complex<float>>(i, j) = OO;
}
else
{
std::complex<float> OO(atof(ss.substr(0, a.indx[0]).c_str()), atof(tt.substr(0, tt.length() - 1).c_str()));
value.at<std::complex<float>>(i, j) = OO;
}
}
}
else if (a.indx.size() == 0 && b.indx.size() == 0) // 只有實部
{
std::complex<float> OO(atof(ss.c_str()), 0);
// float aaa = atof(ss.c_str());
value.at<std::complex<float>>(i, j) = OO;
}
else if (a.indx.size() == 0 && b.indx.size() == 1) // 只有虛部分
{
if (ss.length() == 1)
{
if (flag == 1)
{
std::complex<float> OO(0, -1);
value.at<std::complex<float>>(i, j) = OO;
}
else
{
std::complex<float> OO(0, 1);
value.at<std::complex<float>>(i, j) = OO;
}
}
else
{
if (flag == 1)
{
std::complex<float> OO(0, 0 - stof(ss.substr(0, ss.length() - 1).c_str()));
value.at<std::complex<float>>(i, j) = OO;
}
else
{
std::complex<float> OO(0, stof(ss.substr(0, ss.length() - 1).c_str()));
value.at<std::complex<float>>(i, j) = OO;
}
}
}
p++;
}
string str_name = aa.substr(0, calculatefind.indx9.indx[0]);
SetValue(&A_value, str_name, value);
showMat(A_value, str_name);
}
else
{
// 矩陣賦值操作
Mat value = Mat::zeros(size_rows, size_cols, CV_32F);
vector<int> temp;
temp = calculatefind.indx1.indx;
temp.insert(temp.end(), calculatefind.indx2.indx.begin(), calculatefind.indx2.indx.end());
temp.insert(temp.end(), calculatefind.indx3.indx.begin(), calculatefind.indx3.indx.end());
temp.insert(temp.end(), calculatefind.indx15.indx.begin(), calculatefind.indx15.indx.end());
std::sort(temp.begin(), temp.end(), SortBy);
int i = 0, j = 0;
unsigned int p = 0;
// 下面操作存在問題
while (p<temp.size() - 1)
{
i = p / (size_cols);
j = p % (size_cols);
string ss = aa.substr(temp[p] + 1, temp[p + 1] - temp[p] - 1);
float aaa = atof(ss.c_str());
value.at<float>(i, j) = aaa;
p++;
}
string str_name = aa.substr(0, calculatefind.indx9.indx[0]);
SetValue(&A_value, str_name, value);
showMat(A_value, str_name);
}
/*
Mat imag(3,3,CV_64FC2);
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
imag.at<std::complex<double>>(i,j)=1;
}
}
cout<<imag<<endl;
*/
}
else if (calculatefind.indx4.indx.size() == 1 && calculatefind.indx4.indx[0]<aa.size())
{
// 矩陣加操作
uj5u.com熱心網友回復:
改成視窗式的就是在視窗上畫上數字和運算子,用滑鼠去點擊操作的吧當然也應該接受鍵盤輸入
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
先建立對應的視窗工程,然后把代碼添加進去,主要是一些介面集成uj5u.com熱心網友回復:
百度搜相關關鍵字。uj5u.com熱心網友回復:
就是用命令列輸入的形式,鍵盤輸入,用MFC實作,怎么實作能幫幫我嗎
uj5u.com熱心網友回復:
什么關鍵字呢,MFC不太會用,怎么實作命令列輸入輸出呢
uj5u.com熱心網友回復:
不知道建立什么工程,代碼也不知道放在哪,能幫我改改嗎
uj5u.com熱心網友回復:
建個Mfc工程,然后把你要點擊的放按鈕回應函式哩,要輸出顯示的通過變數或者函式回傳set到編輯框或者界面,不難,慢慢就會了uj5u.com熱心網友回復:
百度搜“MFC 命令列輸入輸出”
uj5u.com熱心網友回復:
命令列程式移植MFC原來的輸入, 輸出都在 stdin 和stdout上
轉換到MFC 就是輸入從編輯框中來, 輸出可以展現到編輯框, 也可以是靜態文本框.
并且輸入的地方, 可能不能使用回圈輸入了, 是需要先在編輯框中輸入好資料, 傳遞到函式中直接處理.
uj5u.com熱心網友回復:
僅供參考:從C語言的選單界面管理系統到C++ Builder的圖形用戶界面,一個簡單的電話簿Demo例子
http://blog.163.com/tab_98/blog/static/1192409720158673337998/
uj5u.com熱心網友回復:
畫個對話框,原來命令輸入的地方,全部搞成編輯框或可鍵盤輸入的控制元件,就好了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/98252.html
標籤:基礎類
上一篇:請大神指教如何用vs2013中的MFC建立一個影像處理程式
下一篇:com連接點系結出錯
