请教字符串截取问题???急!!!

zh8118 2003-06-30 11:03:08
如果有一个字符型数据集类成员变量,如the.m_bb,它的值为"0.01A0.02A0.03A",我只想要第一个"A"前面的数字"0.01",请问要如何实现,才能截取到"0.01",有点急,多谢了!!!
...全文
44 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_feng_fly 2003-06-30
  • 打赏
  • 举报
回复
c++的方法
#include <sstream>
char* pData = "0.01A0.02A0.03A"
stringstream ss;
ss << pData;
vector<float> vecData;
while(ss)
{
char c;
float fData;
ss >> fData;
vecData.push_back(fData);
ss >> c;//吃掉字符'A'
}
if(!ss.eof())
{
//error handle;不是因为读取了所有数据而结束的
}
没有调试,大体思路是这样的
idontlikenickname 2003-06-30
  • 打赏
  • 举报
回复


试试下边的算法~

#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

void main()
{
char szMixStr[256] = "0.01A0.02A0.03A";
char szNum[64];
char szNumSet[] = { "+-.1234567890" };
char *p;
int nLen, nPos1, nPos2;
float fValue;

// 指向字符和数字混合的字符串.
p = szMixStr;
while(1)
{
// 取得当前串长度.
nLen = strlen(p);
// 取得当前串p中第一次出现szNumSet中任意一个字符的位置.
nPos1 = strcspn(p, szNumSet);

// 如果找到数字串strcspn()返回值不等于串长度.
if(nPos1 != nLen)
{
// 从数字开头的串找非数字字符第一次出现的位置.
nPos2 = strspn(p + nPos1, szNumSet);
// 截取数字串到szNum.
memcpy(szNum, p + nPos1, nPos2);
szNum[nPos2] = '\0';
// 转化成浮点数.
fValue = (float)atof(szNum);
// 显示.
printf("szNum[]=%s\tfValue=%f\n", szNum, fValue);
// 跨过数字串指向下一个位置.
p = p + nPos1 + nPos2;
}
else
{
// 剩余串不再含有数字串.
break;
}
}

getch();
}

输出:
szNum[]=0.01 fValue=0.01
szNum[]=0.02 fValue=0.02
szNum[]=0.03 fValue=0.03

rtdb 2003-06-30
  • 打赏
  • 举报
回复
若是要数字:
float a = atof(the.m_bb) ;

若是数字符串定长:
char a[5] ;
strncpy(a, the.m_bb, 5) ;

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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