一个关于字符串处理的问题!

Tomcat4 2004-12-09 05:23:41
109.6,187.8,0; 108,193.6,0; 109.8,195.5,0; 113.4,193.6,0;
117.4,187.8,0; 101.1,187.8,43.01; 99.67,193.6,42.41;
101.3,195.5,43.1; 104.6,193.6,44.52; 108.3,187.8,46.08;

上面是一个模型文件(只是一部分,三行),每行有3-4个点,每个点之间用分号格开,点的x,y,z坐标使用都好格开,现在想提取每个点的相应坐标并生成一个点的数组。问题是使用CString里面的什么函数能实现上面的功能,我看了MSDN,里面提到一个Tokenize函数,但是好像不是CString累的函数,步知道如何使用。
希望大侠们能指教一下,最好有代码,谢谢!
...全文
95 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hongzm 2004-12-10
实现才最重要吧。不一定非要用Cstring吧?
回复
leky2000 2004-12-10
字符串操作本来就很复杂的 呵呵
回复
Tomcat4 2004-12-10
搞定!
while(file.ReadString(str)!=NULL)
{
//AfxMessageBox(str);
int pos1=0,pos2=0;
//pos2 = str.Find(';',pos1);
while((pos2 = str.Find(';',pos1))>0){
str1 = str.Mid(pos1,pos2-pos1)+",";
int pos3=0,pos4=0;
int index=0;
while((pos4 = str1.Find(',',pos3))>0){
str2[index++] = str1.Mid(pos3,pos4-pos3);
if(index==3)
{
Point3D p(atof(str2[0])/1000,atof(str2[1])/1000,atof(str2[2])/1000);
ptArray.push_back(p);
break;
}
pos3=pos4+1;
}
pos1 = pos2+1 ;
}
}
回复
yanwenyuan0102 2004-12-09
何必一定用CString呢?
直接使用标准库里的strchr函数搜索指定的字符的位置,岂不是很简单
回复
oyljerry 2004-12-09
用CString的Find查找到;
然后用Right,Mid,Left来截取
回复
qrlvls 2004-12-09
CString 里没有转换函数
对于ANSI版本可以使用:
sscanf((LPCSTR)(LPCTSTR)szCString, "%f", &f);
回复
3m2u 2004-12-09
fgets()
strtok()
while()
{
atof()
strtok()
}
回复
晨星 2004-12-09
我是说CString。
回复
晨星 2004-12-09
好像VC2002以上可以使用Tokenize。
回复
Tomcat4 2004-12-09
谁知道Tokenize()怎么用啊?
回复
smallcrocodile 2004-12-09
楼上:
是atof9()
回复
danyueer 2004-12-09
补充:Find和Left是CString的成员函数,atoi是C++标准库函数。
回复
danyueer 2004-12-09
调用序列:
Find
Left
atoi

用Find来寻找并定位各个“,”和“;”关键字,用Left来截取数据,用atoi来把字符串转换为数字。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-12-09 05:23
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……