这两周在做一个软件作业,是要用VC实现一个迭代法.主界面有几个 Edit Control,其中2个 Edit Control负责读取输入的系数矩阵以及输出方程组的解,系数矩阵是二维浮点型数组A,方程组的解是一维浮点型数组b,这两个Edit Control我都设置为了CString类型了,并且分别与变量Matrix和vector关联,现在要怎样才能把Matrix和vector中的内容对应转换到A和b中哦?不知道都有哪些函数,所以无从下手,还请大家多多指点,谢谢先:)
调试欢乐多
atof
sprintf
应该就差不多了
CString str("1.234");
double d=atof(str);
//否则(UNICODE或者ANSI)使用万能的_tcstod
TCHAR *pszStop;
CString str(_T("1.234"));
double d=_tcstod(str,&pszStop);
#include <stdlib.h>
#include <stdio.h>void main( void )
{
char *string, *stopstring;
double x;
long l;
int base;
unsigned long ul;
string = "3.1415926This stopped it";
x = strtod( string, &stopstring ); //1
printf( "string = %s\n", string );
printf(" strtod = %f\n", x ); //2
printf(" Stopped scan at: %s\n\n", stopstring );
string = "-10110134932This stopped it";
l = strtol( string, &stopstring, 10 );
printf( "string = %s", string );
printf(" strtol = %ld", l );
printf(" Stopped scan at: %s", stopstring );
string = "10110134932";
printf( "string = %s\n", string );
/* Convert string using base 2, 4, and 8: */
for( base = 2; base <= 8; base *= 2 )
{
/* Convert the string: */
ul = strtoul( string, &stopstring, base );
printf( " strtol = %ld (base %d)\n", ul, base );
printf( " Stopped scan at: %s\n", stopstring );
}
}这是MSDN上给出的例子,1和2分别是转换和输出
输出结果是strtod = 3.141593
希望对你有帮助
下面这个函数就是把 Edit Control中的字符串转换为double型的矩阵值。
// 将字符串转化为矩阵的值
// 元素间的间隔为空格符
// 矩阵各行间的间隔为换行回车符
BOOL CMatrix::FromString(CString s)
{
int i, j, tempcols;
if (s.IsEmpty())
return false;
CString sDelim = " ";
CTokenizer tk(s, "\r\n");
CStringList ListRow;
CString sRow;
while (tk.Next(sRow))
{
sRow.TrimLeft();
sRow.TrimRight();
if (sRow.IsEmpty())
break;
ListRow.AddTail(sRow);
}
// 行数
m_nNumRows = ListRow.GetCount(); sRow = ListRow.GetHead();
CTokenizer tkRow(sRow, sDelim);
CString sElement;
// 列数
m_nNumColumns = 0;
while (tkRow.Next(sElement))
{
m_nNumColumns ++;
} // 检查维数
POSITION pos = ListRow.GetHeadPosition();
for (i = 1; i <= m_nNumRows; i++)
{
sRow = ListRow.GetNext(pos);
CTokenizer tkRow(sRow, sDelim);
tempcols = 0;
while (tkRow.Next(sElement))
{
tempcols ++;
}
//ASSERT(m_nNumColumns == tempcols);
if (m_nNumColumns != tempcols)
{
AfxMessageBox("Please check matrix dimensions !", MB_OK | MB_ICONINFORMATION);
return false;
}
m_nNumColumns = tempcols;
}
// 初始化矩阵
if (! Init(m_nNumRows, m_nNumColumns))
return FALSE;
// 设置值
pos = ListRow.GetHeadPosition();
for (i = 1; i <= m_nNumRows; i++)
{
sRow = ListRow.GetNext(pos);
j = 1;
CTokenizer tkRow(sRow, sDelim);
while (tkRow.Next(sElement))
{
sElement.TrimLeft();
sElement.TrimRight();
double v = atof(sElement);
SetElement(i, j, v);
j ++;
}
}
return TRUE;
}