【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3434|回复: 2

[C/C++] [原创]字符串的拆分

[复制链接]
发表于 2006-4-12 14:42:33 | 显示全部楼层 |阅读模式

今天为了配合图片的格式,做了一个图片对应数据库表,在这个表里面有很多的图片数据。分别记载了每个图片中精灵的位置,大小,偏移量,起始位置等数据

0 0 115 91 62 92 7
0 115 118 50 34 92 7
0 233 110 95 44 94 7
0 343 106 115 37 97 7
0 449 129 94 22 97 7
0 578 152 50 17 95 7
0 730 140 102 57 93 7
0 870 107 118 81 91 7
0 0 209 195 99 162 8

读取他们当然是采用infile.open("serverlist.ini",ios::in);啦,不过提取得数据是一整条字符串,要把字符串提取出来才可以;当然这个方法是有很多的,我在这里说一下我的方法:

c++里面有一个strtok()函数,他的作用就是提取字符,比如

strtok("aaaaa,b,cc,,,,,,ddddd",",")就会变成aaaaa和b和cc和ddddd这样的四部分了!

我们来看一下演示程序:

#include <iostream>
#include <fstream>
#include <atlstr.h>
using namespace std;

struct person
{
CString name;
CString addr;
}pop[17];

char* p;
int r[7];
void main()
{
int i=0;
fstream infile;
infile.open("serverlist.ini",ios::in);
if(!infile)
{
cout<<"文件读取失败"<<endl;
abort();
}
char s[80];
CString TempRbuffer;
while(!infile.eof())
{
infile.getline(s,sizeof(s));
for(p=strtok(s," ");p!=NULL;p = strtok(NULL, " "))
{
r=atoi(p);
i++;
}
for(int g=0;g<7;g++)
{
cout<<"R["<<g<<"]="<<r[g]<<endl;
}

}
infile.close();
getchar();
}

注意:给serverlist.ini中写一行数据比如0 0 115 91 62 92 51

通过这段程序,我们把infile.getline得到的字符数组s里的7组数据,分别付给r[7]中数组里。这样的程序非常的简洁。

strtok函数声明如下:

char *strtok(char *s, const char *delim);

参数说明如下:
s: 待拆分字符串,拆分一个字符串时,第一次调用传递待拆分字符串,后续调用传递NULL;
delim: 分隔符,可以是多个字符,以这些字符中的一个或多个(连续出现时)分隔字符串(数据项)。
返回值:返回本次拆分得到的字符串,返回NULL表示拆分结束。
拆分一个字符串时,需要循环调用本函数。

[此贴子已经被作者于2006-4-13 11:55:38编辑过]
发表于 2006-5-5 14:55:53 | 显示全部楼层

建议使用结构体(struct),整个文件读入buf,直接用memcpy将每一结构体copy到目标变量速度最快。

如果象你这样不用结构体,但是等长的(7*sizeof(int)),也可以用memcpy直接copy到int dec[7]中。

保存地图文件的时候不需要空格和换行,浪费空间,而且自己读写都麻烦,只要是定长的,直接当成一个流就好了。

 楼主| 发表于 2006-5-5 15:11:22 | 显示全部楼层

谢谢你的建议,我在改进版中也正考虑使用结构体!

保存数据我觉得这样会更清楚些`用编辑器好整理一些,我们数据都是从美工那里拿到的Excel数据,改成文本以后很快就能使用了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-19 01:41

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表