gpt4 book ai didi

C++ .obj 解析器面

转载 作者:行者123 更新时间:2023-11-30 04:10:54 24 4
gpt4 key购买 nike

努力将 .obj 文件的面值传递给 vector 。

f 5/1/1 1/2/1 4/3/1
f 5/1/1 4/3/1 8/4/1
f 3/5/2 7/6/2 8/7/2

这就是我需要存储的,但是

f 5//1 1//1 4//1
f 5//1 4//1 8//1
f 3//2 7//2 8//2

有时会这样,我不知道如何解决这个问题,谢谢。

最佳答案

这是一个使用 boost::tokenizer 的例子我用 stdin读取输入('f' 之后的所有值),然后我只需将这些值输出到终端。我相信您可以修改它以从文件中读取并将值放在您需要的地方。

例子1

#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>
using namespace std;
using namespace boost;

void ParseFace(const string& face);
int main(){
cout << "Input a string: " << endl;
string s;
getline(cin,s);
ParseFace(s);
return 0;
}

void ParseFace(const string& face){
boost::char_separator<char> sep(" /");
boost::tokenizer<boost::char_separator<char> > tokens(face, sep);
for(tokenizer<boost::char_separator<char> >::iterator beg=tokens.begin(); beg!=tokens.end();++beg){
cout << *beg << "\n";
}
}

示例输出:

Input a string: 
3/5/2 7/6/2 8/7/2
3
5
2
7
6
2
8
7
2

Input a string:
5//1 1//1 4//1
5
1
1
1
4
1

例子2

记下 boost::char_separator<char> sep(" /"); 行这是将被计为有效分隔符的所有标记的说明符。在您的情况下,将其更改为 boost::char_separator<char> sep("/"); 可能更方便(没有空格),然后像这样简单地读取字符串:

#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>
#include <sstream>
using namespace std;
using namespace boost;

void ParseFace(istringstream& _input);
int main(){
cout << "Input a string: " << endl;
string s;
getline(cin,s);
istringstream input(s);
char isFace = 'v';
input >> isFace;
if (!input.fail()){
if (isFace == 'f')
ParseFace(input);
}
return 0;
}

void ParseFace(istringstream& _input){
string nextVal;
_input >> nextVal;
while(!_input.fail()){
cout << "Next set: " << endl;
boost::char_separator<char> sep("/");
boost::tokenizer<boost::char_separator<char> > tokens(nextVal, sep);
for(tokenizer<boost::char_separator<char> >::iterator beg=tokens.begin(); beg!=tokens.end();++beg){
cout << *beg << "\n";
}
_input >> nextVal;
}
}

示例输出:

Input a string: 
f 5/1/1 1/2/1 4/3/1
Next set:
5
1
1
Next set:
1
2
1
Next set:
4
3
1

Input a string:
f 5//1 1//1 4//1
Next set:
5
1
Next set:
1
1
Next set:
4
1

在第二个示例中,我使用字符串流从整个输入中读取单个字符串,并使用基本检查来查看第一个字符是否为“f”。此示例还应适合您的需求。

关于C++ .obj 解析器面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20405199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com