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

时间:2022-07-04 04:19:10
 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累的函数,步知道如何使用。
  希望大侠们能指教一下,最好有代码,谢谢!

13 个解决方案

#1


调用序列:
Find
Left
atoi

用Find来寻找并定位各个“,”和“;”关键字,用Left来截取数据,用atoi来把字符串转换为数字。

#2


补充:Find和Left是CString的成员函数,atoi是C++标准库函数。

#3


楼上:
是atof9()

#4


谁知道Tokenize()怎么用啊?

#5


好像VC2002以上可以使用Tokenize。

#6


我是说CString。

#7


fgets()
strtok()
while()
{
  atof()
  strtok()
}

#8


CString 里没有转换函数
对于ANSI版本可以使用:
sscanf((LPCSTR)(LPCTSTR)szCString, "%f", &f);

#9


用CString的Find查找到;
然后用Right,Mid,Left来截取

#10


何必一定用CString呢?
直接使用标准库里的strchr函数搜索指定的字符的位置,岂不是很简单

#11


搞定!
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 ;
}
}

#12


字符串操作本来就很复杂的 呵呵

#13


实现才最重要吧。不一定非要用Cstring吧?

#1


调用序列:
Find
Left
atoi

用Find来寻找并定位各个“,”和“;”关键字,用Left来截取数据,用atoi来把字符串转换为数字。

#2


补充:Find和Left是CString的成员函数,atoi是C++标准库函数。

#3


楼上:
是atof9()

#4


谁知道Tokenize()怎么用啊?

#5


好像VC2002以上可以使用Tokenize。

#6


我是说CString。

#7


fgets()
strtok()
while()
{
  atof()
  strtok()
}

#8


CString 里没有转换函数
对于ANSI版本可以使用:
sscanf((LPCSTR)(LPCTSTR)szCString, "%f", &f);

#9


用CString的Find查找到;
然后用Right,Mid,Left来截取

#10


何必一定用CString呢?
直接使用标准库里的strchr函数搜索指定的字符的位置,岂不是很简单

#11


搞定!
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 ;
}
}

#12


字符串操作本来就很复杂的 呵呵

#13


实现才最重要吧。不一定非要用Cstring吧?