回 帖 发 新 帖 刷新版面

主题:求救:代码

各位高手,有一c++buider问题请教,
字符串为AnsiString a (aaa*bbb155*df778.vd*fddsds*)
如何使一个listbox显示各项:aaa  
                           bbb155
                           df778.vd 
                           fddsds
有谁做过这样的程序呢?麻烦给些相似的代码??

回复列表 (共4个回复)

沙发

给你写两个方法(被注释掉的是另一种方法):

#include <vcl.h>
#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OnShow(TObject *Sender)
{
        AnsiString a("aaa*bbb155*df778.vd*fddsds*");

        char str[80];
        char *istr= a.c_str();
        size_t len=strlen(istr),i=0;
        while(sscanf(istr+i,"%[^*]",str)){
            this->ListBox1->Items->Add(str);
            i+=strlen(str)+1;
            if(i>=len) break;
        }
       /* istringstream istr(a.c_str());
        while(1){
               istr.getline(str,80,'*');
               if(strlen(str)>0)
                   this->ListBox1->Items->Add(str);
               else
                   break;
        }  */

}
//---------------------------------------------------------------------------

说来说去 ,BCB 还是 C++ 语言,C++ 的基本功不能丢.
没有坚实的 C/C++ 基础直接学 BCB 是不好的,很多数据处理需要 C/C++ 的基本功.

程序不就是处理数据么?

板凳

我现在的解决方法是这样的:
do
         {
         ListBox1->Items->Append(a.SubString(16,a.Pos("*")-16));
         a=a.SubString(a.Pos("*")+1,a.Length());
         }   while( a.Pos("*")>0);
这样很简单吧?

3 楼

老实说,我不喜欢 MFC 的 CString 和 VCL 的 AnsiString, TString , 通用性不好,

我宁愿走 标准 C/C++ 的道路.

4 楼

最简单的办法:
    TStringList* tList=new TStringList();
    tList->Text=StringReplace(a,"*","\n");
这样, tList对象里就是那些分开以后的字符串了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册