分割字符串问题

stbigcrab 2006-09-26 03:52:56
请教下各位前辈
下面类似的字符串如何分割?

'1' '2' '3' '4'
我想把1,2,3,4提取出来,但是小弟水平不够,请各位指教

...全文
168 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stbigcrab 2006-09-26
  • 打赏
  • 举报
回复
keiy确实正解
xyz_789也正确
谢谢大家
其他代码就没有测试过,回头再努力研究大家的代码
谢谢各位的热心!
mozart007 2006-09-26
  • 打赏
  • 举报
回复
比如你得到待拆的数组是 xxxx

char *rip_char; //存放要拆的每一个数字
int ripped_number=0; //存放拆出了几个数
rip_char = (char *) malloc( strlen(xxxx) );

for (int i=0; i<strlen(xxxx);i++) //遍历每一个char,是数字的就提出来,楼主要的这样吗?
{if( (xxxx[i]>='0')&&(xxxx[i]<='9') || (xxxx[i]>='A')&&(xxxx[i]<='Z') || (xxxx[i]>='a')&&(xxxx[i]<='z') )
{rip_char[ripped_number]=xxxx[i];
ripped_number++;
}
}
//这样就可以,rip_char[ripped_number] 记录每个提出的字符
柯本 2006-09-26
  • 打赏
  • 举报
回复
用BCB的TRegexp 更灵活些:
#include <regexp.h>
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegexp *p=new TRegexp("[^ ']+");
char x[]="'A' '1' '2' 'B'";
int s;
unsigned int l;
s=l=0;
char buff[10];
while(1)
{
s=p->find(x,&l,s+l);
if (s==-1)
break;
strncpy(buff,x+s,l);
buff[l]=0;
Memo1->Lines->Add(buff);
}
}
更复杂的,可用boost的正则表达式库,什么都能做了
柯本 2006-09-26
  • 打赏
  • 举报
回复
AnsiString Str="'A' '1' '2' 'B'";
TStringList *t=new TStringList();
t->Delimiter='\'';
t->DelimitedText=Str;
for (int i=0;i<t->Count;i++)
if (t->Strings[i]!="")
Memo1->Lines->Add(t->Strings[i]);
delete t;
//结果在Memo1->Lines->Sttring[0..3]中,分别为A 1 2 B
stbigcrab 2006-09-26
  • 打赏
  • 举报
回复
是这样的
有一串字符
AnsiString Str="'A' '1' '2' 'B'";

要求的是把
A
1
2
B
独立提取出来作为字符串。
stbigcrab 2006-09-26
  • 打赏
  • 举报
回复
爆寒,刷新一下这么多人回复..
小弟马上测试.
wood542344 2006-09-26
  • 打赏
  • 举报
回复
楼上正解。。
柯本 2006-09-26
  • 打赏
  • 举报
回复
多种方法,但用TStringList的DelimitedText最方便
TStringList *t=new TStringList();
t->Delimiter='\'';
t->DelimitedText="'1' '2' '3' '4'";
int m[4];
int j=0;
for (int i=0;i<t->Count;i++)
if (t->Strings[i]!="")
m[j++]=StrToInt(t->Strings[i]);
delete t;
结果:
//m[0]=1,m[1]=2,m[2]=3,m[3]=4
xyz_789 2006-09-26
  • 打赏
  • 举报
回复
AnsiString k,Str;
k = "'1''2''3''4'";
while(k.Pos("''")!=0)
{
Str = k.SubString(2,1);
Memo1->Lines->Add(Str);
k = k.Delete(1,3);
}
Str = k.SubString(2,1);
Memo1->Lines->Add(Str);
mozart007 2006-09-26
  • 打赏
  • 举报
回复
比如你得到待拆的数组是 xxxx

char *rip_char; //存放要拆的每一个数字
int ripped_number=0; //存放拆出了几个数
rip_char = (char *) malloc( strlen(xxxx) );

for (int i=0; i<strlen(xxxx);i++) //遍历每一个char,是数字的就提出来,楼主要的这样吗?
{if{ (xxxx[i]>='0')||(xxxx[i]<='9')
{rip_rip_char[ripped_number]=xxxx[i];
ripped_number++;
}
}
BlueDeepOcean 2006-09-26
  • 打赏
  • 举报
回复
楼主说的不是很清楚,你的字符串到底是什么样子的?
如果单纯地“1234”分割为“1”、“2”、“3”和“4”的话,则可采用SubString的方式,否则的话,处理方法可能不同。
以“1234”为例:
AnsiString O,T,Tr,F,As;
As = "1234";
O = As.SubString(1,1);
T = As.SubString(2,1);
Tr = As.SubString(3,1);
F = As.SubString(4,1);

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧