如何将字符串放入向量中
How to put a string in a vector?
>我将文件读为字符串。该文件如下所示:
x y z
57.016998 6.841027 -14.977446
53.777576 5.513538 -19.883400
51.014915 3.275565 -26.822357
48.367588 4.105481 -18.890682
我想把这个字符串放到一个向量<3>,xyz。这可能吗?我将不胜感激你的帮助。
这其实很简单:
struct Vector3
{
float x, y, z;
};
int main()
{
std::string input = "57.016998 6.841027 -14.977446n";
std::stringstream ss(input);
std::vector<Vector3> Vertices; // list of vertices
Vector3 v;
ss >> v.x;
ss >> v.y;
ss >> v.z;
Vertices.push_back(v);
return 0;
};
这应该足以创建一个完全有效的解决方案。然而,稍微注意一下:std::stringstream是一个简单但不是最快的解决方案。
作为奖励,如果您要加载大量顶点,我真的建议您研究字符串标记器,尽管它们对于初学者来说可能有点太多了。使用令牌器,您的结束代码将如下所示:
TokenStr buffer("57.016998 6.841027 -14.977446n"); // custom tokenizer class
while (buffer)
{
Vector3 v;
v.x = buffer.nextFloat(); // grab next float, skipping whitespace
v.y = buffer.nextFloat();
v.z = buffer.nextFloat();
Vertices.push_back(v);
}
一些注意事项:
- 分词器不消耗任何动态内存
- 分词器非常高效和快速
- 分词器通常由程序员自定义编写
- 最好的分词器从不修改源缓冲区
- C stdlib 有 strtok,但它会修改源缓冲区,因此并不理想
编辑:感谢 Ben Voigt 的提醒,您只需使用 C 标准库即可轻松实现此目的,而无需使用任何自定义的分词器包装器类:
const char* str = "57.016998 6.841027 -14.977446n27.016998 1.841027 -44.977446";
while (*str)
{
Vector3 v;
v.x = strtof(str, (char**)&str);
v.y = strtof(str, (char**)&str);
v.z = strtof(str, (char**)&str);
Vertices.push_back(v);
}
将所有字符串从文件读取到向量中:
fstream f;
f.open( "file.txt", std::ios::in);
if (!f) return -1;
vector<string> strings;
std::copy( istream_iterator<string > (f), // copy file content
istream_iterator<string > (), std::back_inserter( strings)); // to vector
f.close();
要读取三个向量:
std::vector<string> x;
std::vector<string> y;
std::vector<string> z;
fstream f;
f.open( "file.txt", std::ios::in);
if (!f) return -1;
std::string line;
while( std::getline( f, line)) {
std::istringstream is(line);
x.push_back( *is++);
y.push_back( *is++);
z.push_back( *is);
}
f.close();
相关文章:
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 构造<int>具有 2 个字符串文字的向量
- 如何将元素添加到向量的字符串位置
- 将向量解析<string>为字符串
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 如何使用向量字符串令牌构建表达树
- 将 argv 复制到新的全局向量字符串
- 如何读取控制台输入并将其存储到向量字符串中
- 向量字符串push_back在C 中不起作用
- C char数组和向量字符串
- 可以直接初始化向量<字符串 *> 而不使用 new 吗?
- 迭代向量字符串的字符(C++禁止指针和整数之间的比较)
- 比较两个向量字符串的相似性C++
- 我有麻烦将字符串放入向量字符串
- 如何从一个向量字符串得到一个字符串的联合集
- 函数返回向量/字符串,但不返回数组
- 向量向量字符串固定大小
- c++向量字符串排序不工作
- C++将字符串数组[]复制到向量<字符串>