读书人

C++ BUDER 利用sbustring去换行符的有

发布时间: 2012-08-17 02:08:34 作者: rapoo

C++ BUDER 利用sbustring去换行符的问题
String s12 = Edit1 -> Text;

String s11 = Memo1 -> Text;

m=1;

int p=0,q=0;

for(;m<s11.Length();m++)
{
if(s11.SubString(m,1)==" ")
{
q=p;

p=m;

AnsiString Test_jiafa = s11.SubString(q+1,p-q-1);

matrix_jiafa[matrix_line_jiafa][matrix_column_jiafa] = StrToFloat( Test_jiafa );

matrix_column_jiafa++;

}

if(s11.SubString(m,1)=="\n")
{
q=p;

p=m;

AnsiString Test_jiafa = s11.SubString(q+1,p-q-1);//此处有问题

matrix_jiafa[matrix_line_jiafa][matrix_column_jiafa] = StrToFloat( Test_jiafa );

p=p+1 ;

m++;

matrix_column_jiafa++;

matrix_line_jiafa++;

}

}


我做的这个就是从TMemo中取出来一组矩阵

1 2 3
4 5 6
7 8 9
然后 根据空格和回车判断矩阵的行数和列数
但是处理回车符出现了问题。
AnsiString Test_jiafa = s11.SubString(q+1,p-q-1);//此处有问题
这一段中,当s11.SubString(q+1,p-q-1)时,提示说
"3
"不是一个有效浮点数,我判断这里的 3 后面有个回车符,所以改为s11.SubString(q+1,p-q-2),但是此时提示说
""不是有效浮点数,难道说这里的3\n占一个字符吗?为什么减1以后不仅去掉了/n还去掉了3...
求大侠帮助!!

[解决办法]
一般回车是\r\n吧。
循环用Memo1->Lines->Strings[]来取memo里的每一行吧
[解决办法]
StrToFloat()必须是float的字符串,不能包含其他字符,否则会出现例外
你这里可以会成C函数 float atof(char *ch);
char ch[]="123 456 abc";
float ff=atof(ch); //ff=123,遇到其他字符时自动截断,也没有例外,呵呵
[解决办法]
多么easy的问题啊

C/C++ code
    int cols,rows;    rows =  Memo1->Lines->Count ;    TStringList * pList = new TStringList () ;    pList->Delimiter = " " ;    for(int i = 0; i < Memo1->Lines->Count; i++)    {        pList->Clear() ;        pList->DelimitedText = Memo1->Lines->Strings[i] ;        cols = pList->Count ;        //以下代码为赋值到数组里    }    delete  pList ; 

读书人网 >C++ Builder

热点推荐